2309凡 2024-05-02 22:57 采纳率: 60%
浏览 4

爬取有道翻翻译动态参数问题

最近在爬取有道翻译时,遇到了一些瓶颈,就是它里面有很多参数,有一些参数,那是动态的,是找不到的,之后通过网上搜索教程找到了一种方法是通过查找它的生成规则,再利用生成规则模拟出它的动态参数,参数就是下图用红圈圈住的,突突的那两个就是动态参数,找了一下参数的生成规则,在第二个图,经我的分析,得到的就是sign:时间戳加上,两个固定给出的字符串,再加上0到10的随机数,再加上要翻译的内容(字符串)并且转化为md5编码,
但这样试着去请求他一样报错,我就觉得可能是我理解错了,那个生成规则的代码(JavaScript)到此为止,也还没有解决,希望会的帮我看一下,谢谢。

img

img

  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-05-02 23:12
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:如何正确使用生成规则生成有道翻译的动态参数? 解答:
    1. 观察生成规则 首先,我们需要观察生成规则,我们可以看到,动态参数是由多个固定字符串、时间戳和随机数拼接而成,并将其用MD5加密后作为参数发送请求。
    2. 获取时间戳 我们需要获取当前的时间戳,可以使用Python中的time模块获取。代码示例如下:
    import time
    t = int(time.time()*1000)
    
    1. 获取固定字符串 根据生成规则,我们需要获取两个固定字符串,分别为"fanyideskweb"和"n%A-rKaT5fb[Gy?;N5@Tj"。代码示例如下:
    s1 = "fanyideskweb"
    s2 = "n%A-rKaT5fb[Gy?;N5@Tj"
    
    1. 获取随机数 根据生成规则,我们需要生成0到10之间的随机整数,可以使用Python中的random模块。代码示例如下:
    import random
    r = str(random.randint(0, 10))
    
    1. 获取要翻译的内容 需要将要翻译的内容进行urlencode编码,可以使用Python的urllib.parse模块。代码示例如下:
    import urllib.parse
    content = "hello"
    content = urllib.parse.quote(content)
    
    1. 拼接生成动态参数 将获取到的时间戳、固定字符串、随机数、要翻译的内容按照生成规则进行拼接,并进行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()
    
    1. 发送请求 使用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)
    
    评论

报告相同问题?

问题事件

  • 创建了问题 5月2日

悬赏问题

  • ¥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