大数据分析与可视化 之 有道翻译-1

大数据分析与可视化 之 有道翻译-1

#coding:utf8
import hashlib
import random
import time
from hashlib import md5
import requests


class YoudaoSpider(object):
    def __init__(self):
        # url一定要写抓包时抓到的POST请求的提交地址,但是还需要去掉 url中的“_o”,
        # “_o”这是一种url反爬策略,做了页面跳转,若直接访问会返回{"errorCode":50}
        self.url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        self.headers={
            'Cookie': 'OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65;',
            'Host': 'fanyi.youdao.com',
            'Origin': 'http://fanyi.youdao.com',
            'Referer': 'http://fanyi.youdao.com/',
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
        }
    # 获取lts时间戳,salt加密盐,sign加密签名
    def get_lts_salt_sign(self,word):
        lts = str(round(time.time() * 1000))
        salt = lts + str(random.randint(0, 9))
        data = "fanyideskweb" + word + salt + "Tbh5E8=q6U3EXe+&L[4c@"

        sign = hashlib.md5()
        sign.update(data.encode("utf-8"))
        sign = sign.hexdigest()
        #
        # s=md5()
        # s.update(data.encode())
        # sign=s.hexdigest()
        return lts,salt,sign

    def attack_yd(self,word):
        lts,salt,sign=self.get_lts_salt_sign(word)

        #构建form表单数据
        data={
            "i": str(word),
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign,
            # "lts": lts,
            # "bv": "cda1e53e0c0eb8dd4002cefc117fa588",
            # "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"
        }
        #使用 reqeusts.post()方法提交请求
        res = requests.post(
            url=self.url,
            data=data,
            headers=self.headers,

        ).json()

        result=res["translateResult"][0][0]["tgt"]
        print('翻译结果:', result)

    def run(self):
        try:
            word=input('请输入要翻译的单词:')
            self.attack_yd(word)
        except Exception as e:
            print(e)

if __name__ == '__main__':
    spider=YoudaoSpider()
    spider.run()
posted @ 2023-12-30 20:30  Ivan丶ky  阅读(79)  评论(0)    收藏  举报