有道翻译的爬取
有道翻译的爬取
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()