有道翻译的爬取

时间:2024-02-29 20:15:18

有道翻译的爬取

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