爬虫之js有道翻译
示例代码:
import requests
import hashlib
import time
import json
import random
class Youdao(object):
def __init__(self, word):
self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
# 有道翻译中,请求头必须包括三部分,缺一不可
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
'Referer': 'http://fanyi.youdao.com/',
'Cookie': '_ntes_nnid=5103784677b70eaf04cdcc7f2af0c705,1593405479568; OUTFOX_SEARCH_USER_ID_NCOO=2100388568.2505867; OUTFOX_SEARCH_USER_ID=-1395690799@10.169.0.102; JSESSIONID=aaaWGPTfXdl7Lgo1dE3Dx; ___rl__test__cookies=1612617115317'
}
self.formdata = None
self.word = word
def generate_formdata(self):
ts = str(int(time.time()*100)) # 时间戳
salt = ts + str(random.randint(0, 9)) # 时间戳+随机一个数
sign_str = "fanyideskweb" + self.word + salt + "Tbh5E8=q6U3EXe+&L[4c@" # 对拼接的字符串进行md5加密
md5 = hashlib.md5()
md5.update(sign_str.encode())
sign = md5.hexdigest()
self.formdata = {
'i': self.word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'lts': ts,
'bv': '4f7ca50d9eda878f3f40fb696cce4d6d',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
def get_data(self):
response = requests.post(self.url, data=self.formdata, headers=self.headers)
return response.content
def parse_data(self, data):
data = data.decode()
json_data = json.loads(data)
print(json_data)
print(type(json_data))
trans_data = json_data['translateResult'][0][0]['tgt']
print(trans_data)
def run(self):
# url
# headers
# formdata
self.generate_formdata()
# 发送请求,获取响应
data = self.get_data()
print(data)
# 解析数据
self.parse_data(data)
if __name__ == '__main__':
# youdao = Youdao('good')
youdao = Youdao('好的')
youdao.run()
运行效果:
思路截图: