网易有道翻译接口破解

说明

该网站是有反爬措施的,主要的措施是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

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值