python 爬取有道及破解JS思路

 第一步,构建基础代码:

import requests        #导入requests包
import json
def Youdao(word):
    # word = "'"+word+"'"
    url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
    From_data={'i':word,'from':'AUTO','to':'AUTO','smartresult':'dict','client':'fanyideskweb','salt':'15771662361059','sign':'cd08e8e8d838142b25534e3ab6e805bf','ts':'1577166236105','bv':'dcce310221b79182a6290867a2a1e683','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_CLICKBUTTION'}
    #请求表单数据
    cookie = 'P_INFO=m15617391675@163.com|1575858899|0|other|00&99|shh&1574129903&other#shh&null#10#0#0|156675&1||15617391675@163.com; OUTFOX_SEARCH_USER_ID=742927111@10.169.0.83; JSESSIONID=aaaore6JRqqxBgn1hB28w; OUTFOX_SEARCH_USER_ID_NCOO=1861571491.0418134; ___rl__test__cookies=1577166236100'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36",
        'Referer': 'http://fanyi.youdao.com/',
        'Cookie': cookie

    }

    response = requests.post(url,data=From_data,headers=headers)
    #将Json格式字符串转字典
    content = json.loads(response.text)
    print(content)
    #打印翻译后的数据
    print(content['translateResult'][0][0]['tgt'])
if __name__=='__main__':
    word = '中国'
    Youdao(word)

发现报错

{'errorCode': 50}

第二步:查找报错信息

可以发现

'salt':'15771662361059','sign':'cd08e8e8d838142b25534e3ab6e805bf','ts':'1577166236105'

这三个参数均为MD5加密后的,且随时随地会变

立刻明白肯定经过js加密过了,然后去看

搜了一下果然有啊

r =  int(time.time() * 1000)

i = int(time.time() * 1000) + random.randint(0, 10)

sign = "fanyideskweb" + 你输入查找的名字+i + n%A-rKaT5fb[Gy?;N5@Tj

最终结果如下:

import hashlib
import random
import time
import requests
import json


class Youdao:
    def __init__(self, word):
        self.word = word
        self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        self.D = "n%A-rKaT5fb[Gy?;N5@Tj"
        self.salt = self.get_salt()
        self.sign = self.get_sign()
        self.ts = self.get_ts()

    def get_md(self, value):
        # md5加密
        m = hashlib.md5()
        m.update(value.encode('utf-8'))
        return m.hexdigest()

    def get_salt(self):
        # 根据当前时间戳获取salt参数
        s = int(time.time() * 1000) + random.randint(0, 10)
        return str(s)

    def get_sign(self):
        # 使用md5函数和其他参数,得到sign参数
        s = "fanyideskweb" + self.word + self.salt + self.D
        return self.get_md(s)

    def get_ts(self):
        # 根据当前时间戳获取ts参数
        s = int(time.time() * 1000)
        return str(s)

    def get_result(self):
        Form_Data = {
            'i': self.word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': self.salt,'sign': self.sign,'ts': self.ts,'bv': 'c6b8c998b2cbaa29bd94afc223bc106c','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_CLICKBUTTION'
        }

        cookie = 'P_INFO=m15617391675@163.com|1575858899|0|other|00&99|shh&1574129903&other#shh&null#10#0#0|156675&1||15617391675@163.com; OUTFOX_SEARCH_USER_ID=742927111@10.169.0.83; JSESSIONID=aaaore6JRqqxBgn1hB28w; OUTFOX_SEARCH_USER_ID_NCOO=1861571491.0418134; ___rl__test__cookies=1577166236100'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
            'Referer': 'http://fanyi.youdao.com/',
            'Cookie': cookie
        }
        response = requests.post(self.url, data=Form_Data, headers=headers).text
        translate_results = json.loads(response)
        # 找到翻译结果
        if 'translateResult' in translate_results:
            translate_results = translate_results['translateResult'][0][0]['tgt']
            print("翻译的结果是:%s" % translate_results)
        else:
            print(translate_results)


if __name__ == "__main__":
    y = Youdao('我爱中国')
    y.get_result()

 

参考多位大佬写的,其实我也不会 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值