网易有道翻译接口破解

说明

该网站是有反爬措施的,主要的措施是JS加密参数,随机COOKIE参数

目标网站 http://fanyi.youdao.com/

目的:

我们希望获取翻译接口,可以使用代码调用其接口来做翻译。

操作

1、打开浏览器进入网站,随便输入一个需要翻译的内容

这是主要的几个参数,其他的参数包含了翻译的规格,以及一些无关的参数。。

其中  i 是我们需要翻译的内容

salt 很明显是时间戳

所以最主要的参数还是sign

我们在源码中可以很明确看到

可以看出sign的构造格式

md5("fanyideskweb" + e + t + "sr_3(QOHT)L2dx#uuGR@r")

实际上e就是翻译的内容 i,t就是时间戳salt,这样一来,sign也就出来了。

最后

最后我们把这些参数构造好之后,发现还是没办法获取真实的翻译结果,参数是没问题了,那就看headers,通过实践和经验也可以看出,cookie里面有一个参数OUTFOX_SEARCH_USER_ID=-298057617@10.135.5.21;,发现这个参数是不可缺少的,经过实践测试,前面是一个9位数的数,后面是类似ip的格式,我们就构造成ip。

完整代码如下

# coding=utf8
import time
import random
from hashlib import md5
import requests
import json

class YoudaoFanyi(object):

    def __init__(self):
        self.headers = {
                'Pragma': "no-cache",
                'Origin': "http://fanyi.youdao.com",
                'Accept-Encoding': "gzip, deflate",
                'Accept-Language': "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
                'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
                'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8",
                'Accept': "application/json, text/javascript, */*; q=0.01",
                'Cache-Control': "no-cache",
                'X-Requested-With': "XMLHttpRequest",
                'Connection': "keep-alive",
                'Referer': "http://fanyi.youdao.com/",
                'Cookie': "OUTFOX_SEARCH_USER_ID=-{0}@{1}.{2}.{3}.{4}; ".format(str(random.randint(100000000,999999999)), str(random.randint(10, 241)), str(random.randint(10, 241)), str(random.randint(10, 241)), str(random.randint(10, 241))),
            }


    def fanyi(self, text):
        url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"

        # 有两个参数需要解析
        # salt
        #sign

        # ===源码===
        # var t = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10));
        # return {
        #     salt: t,
        #     sign: n.md5("fanyideskweb" + e + t + "sr_3(QOHT)L2dx#uuGR@r")
        # }
        t = int(time.time() * 1000) + random.randint(0,11)

        # e就是查询的关键字
        sign_str = ("fanyideskweb" + text + str(t) + "sr_3(QOHT)L2dx#uuGR@r").encode("utf-8")

        sign = md5(sign_str).hexdigest()


        data = {
            "i": text,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": str(t),
            "sign": sign,
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTIME",
            "typoResult": "false"
        }

        r = requests.post(url, data=data, headers=self.headers)
        res = json.loads(r.text)
        result = res.get("translateResult")[0][0].get("tgt")
        return result

if __name__ == "__main__":
    fayi = YoudaoFanyi()
    result = fayi.fanyi(u"你也在学习网易有道爬虫吗?")
    print result

 

### 关于网易有道翻译爬虫的实现 #### 一、基本原理 网易有道翻译的爬虫实现主要依赖于模拟浏览器请求,通过分析其接口参数和加密逻辑来完成自动化翻译功能。通常情况下,需要解析目标网站的 JavaScript 文件以了解 `salt` 和 `sign` 的生成方式,并将其应用到 Python 请求中[^1]。 以下是几个关键点: - **URL 地址**: 使用 POST 方法向指定 URL 发送请求,例如 `http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null` [^2]。 - **参数说明**: - `lts`: 时间戳,用于防止缓存攻击。 - `salt`: 随机数或时间戳的一部分,作为签名计算的基础之一。 - `sign`: MD5 加密后的字符串,基于关键词和其他固定字段生成。 #### 二、核心代码示例 下面是一个完整的 Python 实现示例: ```python import requests import hashlib import random import time def generate_sign(keyword): """生成 sign 参数""" salt = str(int(time.time() * 1000)) + str(random.randint(0, 9)) before_md5_str = "fanyideskweb" + keyword + salt + "Ygy_4c=r#e#4EX^NUGUc5" m = hashlib.md5() m.update(before_md5_str.encode('utf-8')) return m.hexdigest(), salt def translate(keyword): 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/91.0.4472.124 Safari/537.36", "Referer": "http://fanyi.youdao.com/", "Cookie": "OUTFOX_SEARCH_USER_ID=-2022895048@10.169.0.83;" } sign, salt = generate_sign(keyword) data = { "i": keyword, "from": "AUTO", "to": "AUTO", "smartresult": "dict", "client": "fanyideskweb", "salt": salt, "sign": sign, "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "action": "FY_BY_REALTlME" } response = requests.post(url, headers=headers, data=data).json() result = response['translateResult'][0][0]['tgt'] return result if __name__ == "__main__": word_to_translate = input("请输入要翻译的内容:") translated_word = translate(word_to_translate) print(f"翻译结果: {translated_word}") ``` 此代码实现了从输入关键字到返回翻译结果的功能[^3]。 #### 三、注意事项 在开发过程中需要注意以下几点: - **反爬机制**: 网易有道翻译具有一定的反爬措施,因此建议设置合理的 User-Agent 并模仿真实用户的访问行为[^4]。 - **动态加载**: 如果发现某些参数无法直接找到,则可能涉及前端框架中的异步调用,需借助工具(如 Fiddler 或 Chrome DevTools)抓包分析[^5]。 - **法律合规性**: 在实际项目中,请务必遵循相关法律法规和服务条款,仅限个人学习用途。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值