【Python爬虫】js反反爬策略之有道翻译,附代码

1.获取需要抓取的URL

在这里插入图片描述

2.分析URL携带的参数

当我们不知道接口中有哪些字段是做了特殊处理的情况下,就根据UA、Content-Type、cookie、token、Referer依次添加尝试
具体为什么要加下次深入研究一下!!!

在这里插入图片描述

首先i参数:我们都能看的明白是什么意思,就是你需要输入的字符串
from 和 to 参数都是AUTO,看js大致意思应该是把所有的语言都返回“AUTO”
smartresult固定参数
client参数就是值得客户端是那个
salt参数:仔细分析就是时间戳后面加个随机数
sign参数:看js源码写的是`md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@") e就是需要翻译的字符串  i就是时间戳加上随机数 ==> salt`
its参数:就是时间戳
bv参数:`md5(navigator.appVersion)`
剩下的参数就不一一说明了....
  • bv参数的源码:
    在这里插入图片描述
  • smartresult参数:
    在这里插入图片描述
源码
# -*- coding: utf-8 -*-
# @Time    : 2021/3/29 16:00
# @Author  : Du
# @File    : youdao.py
# @Projebct: 有道翻译
import requests
import random
import time
import hashlib


class YouDao:
    def __init__(self):
        """
        初始化数据
        """
        self.session = requests.session()
        self.url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
        self.session.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"
        self.session.headers["Referer"] = "http://fanyi.youdao.com"
        self.session.headers[
            "Cookie"] = "OUTFOX_SEARCH_USER_ID=658647048@10.169.0.83; _ga=GA1.2.2116090377.1616481040; OUTFOX_SEARCH_USER_ID_NCOO=1263789870.9027472; JSESSIONID=aaaSnWw6vWZUVggoIN7Hx; ___rl__test__cookies=1617004688353"
        self.session.headers[
            "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"

    def fanyi(self, key_word):
        """
        有道翻译
        :param key_word: 需要翻译的字符串
        :return: 翻译的结果
        """
        i = str(random.randint(1, 9))
        # 获取当前时间戳,想要得到13位 扩大千倍->然后截取.前面所有字符串 取第一个
        times = str(time.time() * 1000).split(".")[0]
        salt = times + i
        string = "fanyideskweb" + key_word + salt + "Tbh5E8=q6U3EXe+&L[4c@"
        # hexdigest是返回十六进制字符串值
        sign = hashlib.md5(string.encode("utf-8")).hexdigest()
        # print(sign)

        data = {
            "i": key_word,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            # 时间戳加一个随机数
            "salt": salt,
            # md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@") e就是需要翻译的字符串  i就是时间戳加上随机数 ==> salt
            "sign": sign,
            # 时间戳
            "lts": times,
            "bv": string,
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME",
        }
        response = self.session.post(url=self.url, data=data).json()
        fanyi_data = response["translateResult"][0][0]
        # print(response["translateResult"][0][0])
        print(f"{fanyi_data['src']} ===> {fanyi_data['tgt']}")


if __name__ == '__main__':
    YouDao().fanyi("book")
# 优化版-->输入即翻译
    while True:
        key_word = input("请输入需要翻译的字符串:")
        YouDao().fanyi(key_word)

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值