有道翻译的爬取
Python作为爬虫的强大人尽皆知,一个人不使用python爬取些什么,那么他的Python生涯一定是不完整的,这里简单写一下用Python爬取有道翻译的教程。
关于有道翻译的爬取网上链接很多,这里爬取的时候发现有道反爬虫机制有一个小bug,直接绕过就可以了。
话不多说,现在开始。
一 服务器数据的获取
打开有道翻译:http://fanyi.youdao.com/ (本人用谷歌浏览器)
右击检查、点击network
在翻译框输入任意字符后点击headers
将每一项挨个点开,寻找post项(浏览器向服务器返回数据一项)
这里得到返回的服务器地址:
Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
向服务器返回的数据向下拖可以看到:
这些数值将以字典形式返回到服务器。其中(salt,sign,ts,bv)四种形式为反爬虫机制需要的数据,我们把它删去就好(为什么这个反爬虫没生效?)
然后将返回地址http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
改为:
http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
二 python代码的书写
由于urllib自带对返回数据的处理,我们只需要将返回值以字典的形式传入,并且通过
Data=urllib.parse.urlencode(dir)即可对数据进行处理,生成返回值
通过request.Urlopen返回一个字典:
用json处理后读取即可
三 结果如下图
本人在此处还搭配了itchat,实现微信的简单翻译。
四 源码如下
from urllib import request
import urllib
import json
import itchat,os,pinyin,shutil
from itchat.content import *
def youdao_tran(tran_word):
url=\'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule\'
data={\'i\':tran_word,
\'from\':\'AUTO\',
\'to\':\'AUTO\',
\'smartresult\':\'dict\',
\'client\':\'fanyideskweb\',
\'doctype\':\'json\',
\'version\':\'2.1\',
\'keyfrom\':\'fanyi.web\',
\'action\':\'FY_BY_REALTIME\',
\'typoResult\':\'false\'}
data=urllib.parse.urlencode(data).encode(\'utf-8\')
responce=request.urlopen(url,data)
reply=json.loads(responce.read().decode(encoding=\'utf-8\'))[\'translateResult\'][0][0][\'tgt\']
print(reply)
return reply
@itchat.msg_register(TEXT)#只对文本信息进行操作
def auto_reply(msg):
if msg[\'Text\'].split(\':\')[0]==\'翻译\':
defaultReply = youdao_tran(msg[\'Text\'].split(\':\')[1])
return defaultReply
# 为了让实验过程更加方便(修改程序不用多次扫码),我们使用热启动
itchat.auto_login(hotReload=True)#生成Qcode码,扫描成功即可登录网页版微信
itchat.run()