有道翻译的爬虫实例

网址:

分析:

 

通过对网页结构分析发现,这个网页是用js加密的,所以:

一:通过抓包工具抓取不同单词对应的数据包进行数据请求参数的比对,发现只有如下三个参数需要进行动态处理-(salt,lts,sign)

二:通过对sign进行全局搜索:

接着进行局部搜索:

 打断点发现该sign值是我们需要的,所以:

-sign的值是经过md5加密,加密的时候使用到了两个变量。 -e:需要翻译的单词,-i:字符串形式的js时间戳+1位数的随机整数(i是一个字符串类型的数据)-备注:(python的时间戳*1000=js时间戳)

三:接下来改写代码:

我这里用的是js发条:

 先把调用函数写好。

接着进入md5函数中,如上文,该加密方式是用md5加密的。

然后对该调用函数进行粘贴复制:

最后改写成功,获得了我们想要的sign值(注:这里有一些参数是在pycharm中实现的)

四:接下来在pycharm中改写函数:

使用的数据库有:

import requests
import execjs
import random
import time

execjs这个库需要自己安装。

然后对时间戳进行处理:

e = input('enter a English word:')
r = str(int(time.time()*1000))
i = str(int(time.time()*1000))+str(int(random.random()*10))

注:time.time()*1000就是python的时间戳

最后就是写整体代码,调用js文件:

node = execjs.get()
ctx = node.compile(open('./youdao.js',encoding='utf-8').read())
funcName = "getSign('{0}','{1}')".format(e,i)
sign = ctx.eval(funcName)
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62",
           "Referer":"https://fanyi.youdao.com/",
           "Cookie":"OUTFOX_SEARCH_USER_ID=1126848928@10.110.96.153; JSESSIONID=aaaStRaETzLCbfYrYCa6x; OUTFOX_SEARCH_USER_ID_NCOO=1327853885.097192; ___rl__test__cookies=1642832654565"}
data = {'i': e,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': i,
'sign': sign,
'lts': r,
'bv': '3c2c16e00dc6f2c6dfe859fcd6ef9592',
'doctype': 'json',
'version': 2.1,
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
result = requests.post(url,headers=headers,data=data).json()
print(result)

就得到了preview中的内容了

最后的最后,附上源代码:

import requests
import execjs
import random
import time

e = input('enter a English word:')
r = str(int(time.time()*1000))
i = str(int(time.time()*1000))+str(int(random.random()*10))
node = execjs.get()
ctx = node.compile(open('./youdao.js',encoding='utf-8').read())
funcName = "getSign('{0}','{1}')".format(e,i)
sign = ctx.eval(funcName)
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62",
           "Referer":"https://fanyi.youdao.com/",
           "Cookie":"OUTFOX_SEARCH_USER_ID=1126848928@10.110.96.153; JSESSIONID=aaaStRaETzLCbfYrYCa6x; OUTFOX_SEARCH_USER_ID_NCOO=1327853885.097192; ___rl__test__cookies=1642832654565"}
data = {'i': e,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': i,
'sign': sign,
'lts': r,
'bv': '3c2c16e00dc6f2c6dfe859fcd6ef9592',
'doctype': 'json',
'version': 2.1,
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
result = requests.post(url,headers=headers,data=data).json()
print(result)

拜拜。希望各位在这篇博客中可以学到东西!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值