利用爬虫编译翻译器 (包含防御反爬虫)

本文详细介绍如何使用F12工具抓取有道翻译的POST请求,解析FormData数据,包括sign、ts、bv、salt等参数的生成原理,并用Python实现加密过程,最终通过爬虫获取翻译结果。

第一步:
打开 http://youdao.fanyi.com/ 按F12工具进行抓包监察
我们需要点击Network 勾选Preserve log 高亮XHR

在这里插入图片描述

现在我们尝试在翻译区输入翻译内容

我们发现抓取了一条POST请求的内容

在这里插入图片描述

点击此项,然后点击Preview查看是不是我们需要的内容

在这里插入图片描述

确认无误后我们点击 Headers 查看相关内容

在这里插入图片描述

这是我们实际向服务器请求的网站,浏览器中显示的是经过修改的。

拉到 Headers 最下面我们得到了Form Data数据

在这里插入图片描述

此时我们再进行一次新的翻译查看 Form Data内容

在这里插入图片描述

我们观察到只有 sign、 ts、 bv、 salt、 i 这5个内容是不相同的。
目前我们只知道 i 是我们要翻译的内容

第二步:
回到F12工具,点击右上方三个点的工具菜单,然后点击

search
在这里插入图片描述

之后我们在搜索器中搜索 sign 关键词得到一条内容,点击此内容

在这里插入图片描述
之后会跳转到代码的位置
在这里插入图片描述

此时我们将内容复制到 json网站进行格式化

http://www.bejson.com/

点击左下方深蓝色的按钮进行格式化

在这里插入图片描述

第三步:
我们将上述代码复制到python的 IDLE 文件下进行搜索

在这里插入图片描述

有非常多的搜索结果,我们只需要最后返回的值即可搜索内容如上图所示
从这里我们观察到

ts 对应的值是 rr的值则是时间截(从1970到现在的总秒数 利用python的time()方法即可得到)

在这里插入图片描述

salt 对应的值是 ii 的值则是在 r
的基础上随机加一个 1,10 的随机数

在这里插入图片描述

bv 对应的值则是 tt 的值是用户请求网站浏览器的版本号(就是请求头 User-Agent),只是将版本号进行了md5 的加密。

在这里插入图片描述

sign 的值则是将上述的内容全部加在一起然后进行md5加密

在这里插入图片描述

其中 e 则是我们翻译的内容

在这里插入图片描述输入 e 搜索 即可得到

第四步:
将得到的数据进行爬虫编译

首先是设置请求头,将爬虫伪装成普通浏览器

        'User-Agent':ua.random,
        'Referer':'http://fanyi.youdao.com/',    #维持对话 保持cookies
        }
此外为了避免多次请求翻译,使得cookies多次变换,我们还需要将会话一直维持

```python
s  = requests.session()  #维持对话 保持cookies

将得到的加密数据变回python代码

ts = str(int(time.time()*1000))
        salt = ts + str(random.randint(0,10))
        bv = hashlib.md5(ua.random.encode('utf-8')).hexdigest()
        sign = hashlib.md5(("fanyideskweb" + key + salt + "n%A-rKaT5fb[Gy?;N5@Tj").encode('utf-8')).hexdigest()

还需要将得到的 Form Data数据输入进去

data = {}
        data['i'] = key,
        data['smartresult'] = 'dict',
        data['doctype'] = 'json'
        data['version'] = '2.1',
        data['client'] = 'fanyideskweb',
        data['keyfrom'] = 'fanyi.web',
        data['action'] = 'FY_BY_REALTlME'
        data['from'] = 'AUTO',
        data['to'] = 'AUTO',
        data['ts'],data['bv'],data['salt'],data['sign'] = get_jiami(key)
        

最后我们只需要将爬取的进行帅选即可

    re = s.get("http://fanyi.youdao.com/", headers=headers)  #维持对话 保持cookies
        
    #key = input('请输入要翻译的内容:').strip()
    key = v1.get()
    response = s.post(url=url, data=param(), headers = headers)
    #显示
    msg = response.json().get('smartResult')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值