出去一趟才知道英文的重要性!

回来做一个有道翻译的爬虫项目,帮助日常查询学习单词
私信博主01 领取完整项目代码!
知识点:
爬虫
反爬分析
效果:

开始制作
▲▲▲
分析:
打开有道词典,查看翻译请求的url,封装的headers信息,以及下面的data数据信息


要找到数据中salt,sign,ts,bv字段的生成方式
通过打开相应的js文件

搜到要查看的字段,分析js代码

bv: 版本号的md5加密
ts: 一个时间戳
salt: 时间戳+一个10以内的随机数
sign: 两段固定值+带翻译字段+salt合成的字段md5加密
代码:
import requests
from hashlib import md5
import random
import time
import json
class YDTranslate():
def __init__(self, key, encry_string):
#获取一些初始字段
self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
self.key = key
self.appVersion = '5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
self.encry_string = encry_string
self.ts = self.ts()
self.bv = self.bv()
self.salt = self.salt()
self.sign = self.sign()
#封装headers信息
self.headers = {
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'keep-alive',
'Content-Length':'251',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie':'OUTFOX_SEARCH_USER_ID=-275607117@10.169.0.83; OUTFOX_SEARCH_USER_ID_NCOO=447981333.4251267; _ga=GA1.2.241140362.1560759881; _ntes_nnid=a2b8b52948e9f02708d0778613e1d3a6,1562727377858; JSESSIONID=aaau-eQ5b0In65Q1xY-4w; ___rl__test__cookies=1573028282928',
'Host':'fanyi.youdao.com',
'Origin':'http://fanyi.youdao.com',
'Referer':'http://fanyi.youdao.com/',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36',
'X-Requested-With':'XMLHttpRequest',
}
#封装data信息
self.data = {
'i': key,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': self.salt,
'sign': self.sign,
'ts': str(self.ts),
'bv': self.bv,
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTIME',
}
def ts(self):
return int(time.time()*1000)
def bv(self):
s = md5()
s.update(self.appVersion.encode())
return s.hexdigest()
def salt(self):
return str(self.ts) + str(random.randint(0, 10))
def sign(self):
string = "fanyideskweb" + self.key + str(self.salt) + self.encry_string
s = md5()
s.update(string.encode())
return s.hexdigest()
def get_translate(self):
'''获取翻译结果'''
res = requests.post(self.url, data=self.data, headers=self.headers)
res.encoding = 'utf-8'
html = res.text
rDict = json.loads(html)
translate = rDict['translateResult'][0][0]['tgt']
try:
rList = rDict['smartResult']['entries']
reslist = ''.join(rList)
print('翻译:{0} \n解释:{1}'.format(translate, reslist))
except:
pass
return translate
#调用翻译类
print('====单词翻译====')
print('---输入quit退出---')
while True:
key = input('请输入要翻译的单词:')
if key != 'quit':
encry_string = 'n%A-rKaT5fb[Gy?;N5@Tj'
res = YDTranslate(key, encry_string)
res.get_translate()
else:
break
使用pyinstall打包


完成!!!

1587

被折叠的 条评论
为什么被折叠?



