有道翻译的爬取

有道翻译的爬取

Python作为爬虫的强大人尽皆知,一个人不使用python爬取些什么,那么他的Python生涯一定是不完整的,这里简单写一下用Python爬取有道翻译的教程。

关于有道翻译的爬取网上链接很多,这里爬取的时候发现有道反爬虫机制有一个小bug,直接绕过就可以了。

话不多说,现在开始。

一 服务器数据的获取

打开有道翻译:http://fanyi.youdao.com/     (本人用谷歌浏览器)

右击检查、点击network

wps331F.tmp

在翻译框输入任意字符后点击headers

wps3320.tmp

将每一项挨个点开,寻找post项(浏览器向服务器返回数据一项)

这里得到返回的服务器地址:

Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

向服务器返回的数据向下拖可以看到:

wps3330.tmp

这些数值将以字典形式返回到服务器。其中(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)即可对数据进行处理,生成返回值

wps3331.tmp

通过request.Urlopen返回一个字典:

wps3332.tmp

用json处理后读取即可

三 结果如下图

本人在此处还搭配了itchat,实现微信的简单翻译。

wps3333.tmp

四 源码如下

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()

posted on 2018-12-19 21:51  浅浅月  阅读(2490)  评论(0编辑  收藏  举报