爬虫—有道翻译案例分析

#coding:utf-8

import requests

import hashlib

import time

import random

class Youdao(object):

     def __init__(self,word):

         self.url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

         self.headers = {

             'Cookie': 'OUTFOX_SEARCH_USER_ID=-676104602@10.108.160.100; JSESSIONID=aaac40qHRBaDr_iGhSLUx; OUTFOX_SEARCH_USER_ID_NCOO=696608045.4734024; fanyi-ad-id=115021; fanyi-ad-closed=1; ___rl__test__cookies=1630572993167',

             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',

             'Referer': 'https: // fanyi.youdao.com /'

         }

         self.formdata = None

         self.word = word

     # 生成 formdata

     def generate_formdata(self):

         word = self.word

         """

         1. 分析表单中动态变化的参数 ( 多次抓包对比 )

         2. 全局搜索动态参数的字段或者值

         3. 找出对应实现的 js 代码 , 打断点分析

             ts: "" +外汇跟单gendan5.com (new Date).getTime(),

             salt: r + parseInt(10 * Math.random(), 10);

             sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT") MD5 加密算法

          """

         # 4. js 代码转化为 python 代码实现

         # 获取字符串形式的时间戳

         lts = str(time.time()*1000)

         # 时间戳 + 随机数

         salt = lts + str(random.randint(1,9))

         # md5 字符串加密 32

         tempstr = "fanyideskweb" + self.word + salt + "Y2FYu%TNSbMCxc3t2u^XT"

         md5 = hashlib.md5()

         md5.update(tempstr.encode())

         sign = md5.hexdigest()

         # 构造表单字典

         self.formdata = {

             'i': word,

             'from': 'AUTO',

             'to': 'AUTO',

             'smartresult': 'dict',

             'client': 'fanyideskweb',

             'salt': salt,

             'sign': sign,

             'lts': lts,

             'bv': '89e18957825871c419be045180c67d3b',

             'doctype': 'json',

             'version': '2.1',

             'keyfrom': 'fanyi.web',

             'action': 'FY_BY_CLICKBUTTION'

         }

     def get_data(self):

         response = requests.post(url=self.url,headers=self.headers,data=self.formdata)

         return response.json()

     def run(self):

         # url

         # headers

         # formdata

         self.generate_formdata()

         # 发送请求 , 获取相应

         data = self.get_data()

         # 解析数据

         result = data['translateResult'][0][0]['tgt']

         print(result)

if __name__ == '__main__':

     word = input(' 请输入需要翻译的汉语 :')

     Youdao = Youdao(word)

     Youdao.run()


请使用浏览器的分享功能分享到微信等