最近在爬取有道翻译时,遇到了一些瓶颈,就是它里面有很多参数,有一些参数,那是动态的,是找不到的,之后通过网上搜索教程找到了一种方法是通过查找它的生成规则,再利用生成规则模拟出它的动态参数,参数就是下图用红圈圈住的,突突的那两个就是动态参数,找了一下参数的生成规则,在第二个图,经我的分析,得到的就是sign:时间戳加上,两个固定给出的字符串,再加上0到10的随机数,再加上要翻译的内容(字符串)并且转化为md5编码,
但这样试着去请求他一样报错,我就觉得可能是我理解错了,那个生成规则的代码(JavaScript)到此为止,也还没有解决,希望会的帮我看一下,谢谢。
爬取有道翻翻译动态参数问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注 让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
问题:如何正确使用生成规则生成有道翻译的动态参数? 解答:- 观察生成规则 首先,我们需要观察生成规则,我们可以看到,动态参数是由多个固定字符串、时间戳和随机数拼接而成,并将其用MD5加密后作为参数发送请求。
- 获取时间戳 我们需要获取当前的时间戳,可以使用Python中的time模块获取。代码示例如下:
import time t = int(time.time()*1000)
- 获取固定字符串 根据生成规则,我们需要获取两个固定字符串,分别为"fanyideskweb"和"n%A-rKaT5fb[Gy?;N5@Tj"。代码示例如下:
s1 = "fanyideskweb" s2 = "n%A-rKaT5fb[Gy?;N5@Tj"
- 获取随机数 根据生成规则,我们需要生成0到10之间的随机整数,可以使用Python中的random模块。代码示例如下:
import random r = str(random.randint(0, 10))
- 获取要翻译的内容 需要将要翻译的内容进行urlencode编码,可以使用Python的urllib.parse模块。代码示例如下:
import urllib.parse content = "hello" content = urllib.parse.quote(content)
- 拼接生成动态参数 将获取到的时间戳、固定字符串、随机数、要翻译的内容按照生成规则进行拼接,并进行MD5加密。代码示例如下:
import hashlib sign = s1 + content + r + s2 md5 = hashlib.md5() md5.update(sign.encode('utf-8')) sign = md5.hexdigest() sign = str(t) + r + sign + s2 md5.update(sign.encode('utf-8')) sign = md5.hexdigest()
- 发送请求 使用Python中的requests模块发送请求。代码示例如下:
import requests url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} data = { "i": "hello", "from": "AUTO", "to": "AUTO", "smartresult": "dict", "client": "fanyideskweb", "salt": str(t), "sign": sign, "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "action": "FY_BY_ENTER", "typoResult": "true" } response = requests.post(url, headers=headers, data=data)
完整代码示例:
import time import random import hashlib import urllib.parse import requests url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" } s1 = "fanyideskweb" s2 = "n%A-rKaT5fb[Gy?;N5@Tj" content = "hello" content = urllib.parse.quote(content) t = int(time.time()*1000) r = str(random.randint(0, 10)) sign = s1 + content + r + s2 md5 = hashlib.md5() md5.update(sign.encode('utf-8')) sign = md5.hexdigest() sign = str(t) + r + sign + s2 md5.update(sign.encode('utf-8')) sign = md5.hexdigest() data = { "i": "hello", "from": "AUTO", "to": "AUTO", "smartresult": "dict", "client": "fanyideskweb", "salt": str(t), "sign": sign, "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "action": "FY_BY_ENTER", "typoResult": "true" } response = requests.post(url, headers=headers, data=data)
解决 无用评论 打赏 举报
悬赏问题
- ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
- ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
- ¥15 数字信号处理考试111
- ¥100 关于#audobe audition#的问题,如何解决?
- ¥15 allegro17.2生成bom表是空白的
- ¥15 请问一下怎么打通CAN通讯
- ¥20 如何在 rocky9.4 部署 CDH6.3.2?
- ¥35 navicat将excel中的数据导入mysql出错
- ¥15 rt-thread线程切换的问题
- ¥15 高通uboot 打印ubi init err 22