vscode解决{“errorCode“:50}反爬机制

1. 源码

import requests
import json
import random
import time
import hashlib
class Youdao(object):
    def __init__(self,word):
        self.url='https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        self.word=word
        self.headers={
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.39",
            'Cookie':'OUTFOX_SEARCH_USER_ID=-120041047@10.108.162.138; OUTFOX_SEARCH_USER_ID_NCOO=781515876.4212875; fanyi-ad-id=305560; fanyi-ad-closed=1; UM_distinctid=1802bf305833f3-013930fe6ba678-48667e5c-1fa400-1802bf30584424; JSESSIONID=aaaqD4BLo71KPh6Iv_Ray; ___rl__test__cookies=1650008270898',
            "Referer": "https://fanyi.youdao.com/?keyfrom=dict2.index"}
        self.key='Ygy_4c=r#e#4EX^NUGUc5' #一个关键的东西
    #post请求需要传输的data参数
    def data_dict(self):
        lts=str(int(time.time() * 1000))   #生成时间戳
        salt=lts + str(random.randint(0, 9)) 
        sign1="fanyideskweb" + self.word + salt + self.key  #未加密
        sign2=hashlib.md5(sign1.encode()).hexdigest() #哈希值加密
        data_dict={
            "i": self.word,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign2,
            "lts": lts,
            "bv": "8c5b4ecb9f7fdfe6b297ab984775a98",
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"}
        return data_dict
    # 提取响应结果
    def Get_contents(self):
        response=requests.post(url=self.url,headers=self.headers,data=self.data_dict())
        data=json.loads(response.content)
        print('待译内容:'+self.word)
        print('翻译结果:'+data['translateResult'][0][0]['tgt'])
        try:
            strs=','.join([i.strip() for i in data['smartResult']['entries'] if i.strip() !=''and i.strip() !=data['translateResult'][0][0]['tgt']])
            if len(strs)>0:
                print('相关结果:'+strs)
        except:
            print('没有其他相关结果')
if __name__ == '__main__':
    wors=input('请输入中文内容')
    youdao=Youdao(wors)
    data=youdao.Get_contents()

2. 运行结果

在这里插入图片描述

3. 解析

在浏览器右键单击检查,找到我们需要的post请求,多次输入中文,查看其表单数据的变化。发现ltssaltsign这三个值在变化。请添加图片描述
请添加图片描述
通过分析发现(全局搜索),在fanyi.min.js里面找到了这三个相关数据

  • lts:一个时间戳
  • salt:时间戳加个随机数
  • sign:“fanyideskweb” + 时间戳 + 要翻译的内容 + “Ygy_4c=r#e#4EX^NUGUc5”,结果进行过加密。

4. 替换

上列代码你只需要在def __init__(self,word)里面替换你自己的self.headersself.key
self.key的值在浏览器右击检查,搜索n.md5("fanyideskweb"+e+i+(搜索在右上角那三个小点点),后面紧跟的值就是我们需要的。
请添加图片描述

5. 说明

此方法截至发稿时可用,此爬虫无非就是对找到我们需要的post请求,确定请求网址,对表单数据进行多次对比。我们找到了三个在不停变化的值,通过经验很容易得出ltssalt与时间戳有关。最后一个sign则需要在源码里面全局搜索,很明显它是一个键值对,对其稍加分析即可知道他怎么来的(前提得会点Js)。我用的是Edge浏览器,所以是中文的。

此代码仅供学习使用
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值