1.获取需要抓取的URL
2.分析URL携带的参数
当我们不知道接口中有哪些字段是做了特殊处理的情况下,就根据UA、Content-Type、cookie、token、Referer依次添加尝试
具体为什么要加下次深入研究一下!!!
首先i参数:我们都能看的明白是什么意思,就是你需要输入的字符串
from 和 to 参数都是AUTO,看js大致意思应该是把所有的语言都返回“AUTO”
smartresult固定参数
client参数就是值得客户端是那个
salt参数:仔细分析就是时间戳后面加个随机数
sign参数:看js源码写的是`md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@") e就是需要翻译的字符串 i就是时间戳加上随机数 ==> salt`
its参数:就是时间戳
bv参数:`md5(navigator.appVersion)`
剩下的参数就不一一说明了....
- bv参数的源码:
- smartresult参数:
源码
# -*- coding: utf-8 -*-
# @Time : 2021/3/29 16:00
# @Author : Du
# @File : youdao.py
# @Projebct: 有道翻译
import requests
import random
import time
import hashlib
class YouDao:
def __init__(self):
"""
初始化数据
"""
self.session = requests.session()
self.url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
self.session.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"
self.session.headers["Referer"] = "http://fanyi.youdao.com"
self.session.headers[
"Cookie"] = "OUTFOX_SEARCH_USER_ID=658647048@10.169.0.83; _ga=GA1.2.2116090377.1616481040; OUTFOX_SEARCH_USER_ID_NCOO=1263789870.9027472; JSESSIONID=aaaSnWw6vWZUVggoIN7Hx; ___rl__test__cookies=1617004688353"
self.session.headers[
"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"
def fanyi(self, key_word):
"""
有道翻译
:param key_word: 需要翻译的字符串
:return: 翻译的结果
"""
i = str(random.randint(1, 9))
# 获取当前时间戳,想要得到13位 扩大千倍->然后截取.前面所有字符串 取第一个
times = str(time.time() * 1000).split(".")[0]
salt = times + i
string = "fanyideskweb" + key_word + salt + "Tbh5E8=q6U3EXe+&L[4c@"
# hexdigest是返回十六进制字符串值
sign = hashlib.md5(string.encode("utf-8")).hexdigest()
# print(sign)
data = {
"i": key_word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
# 时间戳加一个随机数
"salt": salt,
# md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@") e就是需要翻译的字符串 i就是时间戳加上随机数 ==> salt
"sign": sign,
# 时间戳
"lts": times,
"bv": string,
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME",
}
response = self.session.post(url=self.url, data=data).json()
fanyi_data = response["translateResult"][0][0]
# print(response["translateResult"][0][0])
print(f"{fanyi_data['src']} ===> {fanyi_data['tgt']}")
if __name__ == '__main__':
YouDao().fanyi("book")
# 优化版-->输入即翻译
while True:
key_word = input("请输入需要翻译的字符串:")
YouDao().fanyi(key_word)