大数据分析与可视化 之 有道翻译-1
#coding:utf8
import hashlib
import random
import time
from hashlib import md5
import requests
class YoudaoSpider(object):
def __init__(self):
# url一定要写抓包时抓到的POST请求的提交地址,但是还需要去掉 url中的“_o”,
# “_o”这是一种url反爬策略,做了页面跳转,若直接访问会返回{"errorCode":50}
self.url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
self.headers={
'Cookie': 'OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65;',
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com/',
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
}
# 获取lts时间戳,salt加密盐,sign加密签名
def get_lts_salt_sign(self,word):
lts = str(round(time.time() * 1000))
salt = lts + str(random.randint(0, 9))
data = "fanyideskweb" + word + salt + "Tbh5E8=q6U3EXe+&L[4c@"
sign = hashlib.md5()
sign.update(data.encode("utf-8"))
sign = sign.hexdigest()
#
# s=md5()
# s.update(data.encode())
# sign=s.hexdigest()
return lts,salt,sign
def attack_yd(self,word):
lts,salt,sign=self.get_lts_salt_sign(word)
#构建form表单数据
data={
"i": str(word),
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": salt,
"sign": sign,
# "lts": lts,
# "bv": "cda1e53e0c0eb8dd4002cefc117fa588",
# "doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME"
}
#使用 reqeusts.post()方法提交请求
res = requests.post(
url=self.url,
data=data,
headers=self.headers,
).json()
result=res["translateResult"][0][0]["tgt"]
print('翻译结果:', result)
def run(self):
try:
word=input('请输入要翻译的单词:')
self.attack_yd(word)
except Exception as e:
print(e)
if __name__ == '__main__':
spider=YoudaoSpider()
spider.run()