【Python应用】爬取有道翻译API,自制翻译工具(Python爬虫)

Floria ·
更新时间:2024-09-21
· 582 次阅读

有道翻译官网:http://fanyi.youdao.com/

分析网站

打开网页,F12找到translate这个XHR文件中存在主要信息,找到最后的From Data(数据的来源,如何获取的,最后调用翻译)
在这里插入图片描述

对于这两组数据,不知道是什么?(虽然bv也不知道是什么,不过好像对项目没有直接的影响)看到sign可能是一个十六进制的数据,通过找到fanyi.min.js(别问我怎么知道是这个文件,一个个JS文件打开来自己慢慢看,有没有自己想要的)
在这里插入图片描述

将JS文件用在线json网站:https://www.json.cn/解析出来,搜索salt,找到

salt:I,sign:n.md5(“fanyideskweb"+e+i+"n%A-rKaT5fb[Gy?;N5@Tj” ”)
n%A-rKaT5fb[Gy?;N5@Tj

这个是有道翻译内部的识别码,也无需破解,直接模仿浏览器访问就好

在这里插入图片描述
使用print(res.json())获取到网页返回的json值,我们需要的数据在translateResult这个字典的键值对中的‘tgt’里,然而这个是有三层的,所以前面保存空位,用[0][0]存空位,最后打印出来。

print(res.json()['translateResult'][0][0]['tgt'])

在这里插入图片描述
salt和ts只是后面一个数字不同,而ts是时间,和time.time()*1000返回的值一直,所以salt是时间加上一个随机数。
fanyi.min.js文件中搜索salt可知
在这里插入图片描述
http://shared.ydstatic.com/fanyi/newweb/v1.0.22/scripts/newweb/fanyi.min.js

全部代码如下: import requests def get_salt(): import time import random salt = int(time.time()) * 1000 + random.randint(0, 9) return salt def get_sign(key, salt): import hashlib md5 = hashlib.md5() str1 = "fanyideskweb" + key + str(salt) + "n%A-rKaT5fb[Gy?;N5@Tj" md5.update(str1.encode()) return md5.hexdigest() def fanyi(key): url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule" salt = get_salt() data = { 'i': str(str1),#用户输入的查询数据 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': get_salt(), 'sign': get_sign(key, salt), 'bv': 'b396e111b686137a6ec711ea651ad37c', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME', } headers = { 'Accept': 'application / json, text / javascript, * / *; q = 0.01', 'Accept - Encoding': 'gzip, deflate', 'Accept - Language': 'zh - CN, zh;q =0.9', 'Connection': 'keep - alive', 'Content - Length': str(len(data)),#文本长度 'Content - Type': 'application / x - www - form - urlencoded;charset = UTF - 8', 'Cookie': 'OUTFOX_SEARCH_USER_ID = 1005740237 @ 10.108.160.19;OUTFOX_SEARCH_USER_ID_NCOO = 1384111467.600651;\ JSESSIONID = aaam2Y9bDM - LJ61vp9D7w;___rl__test__cookies = 1575686365619', 'Host': 'fanyi.youdao.com', 'Origin': 'http: // fanyi.youdao.com', 'Referer': 'http: // fanyi.youdao.com /', 'User - Agent': 'Mozilla / 5.0(WindowsNT10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko)\ Chrome / 75.0.3770.100Safari / 537.36,X - Requested - With: XMLHttpRequest', } res = requests.post(url=url, headers=headers, data=data) print(res.json()['translateResult'][0][0]['tgt']) if __name__ == '__main__': str1 = input("请输入需要翻译的内容:") fanyi(str1)
作者:被大笨猪拱了的大白菜



有道 python爬虫 工具 api Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号