爬虫实践:爬取有道翻译(附带UI界面)

本文介绍了如何利用Python爬虫技术实现有道翻译的自动化功能,包括理解Post请求、破解反爬机制(涉及MD5和时间戳),并结合Tkinter UI设计了一个简单的翻译器。作者详细解析了参数加密过程,并提供了完整的代码示例。
摘要由CSDN通过智能技术生成

1.爬取分析

实现一键翻译功能,最简单的方案当然是我们的爬虫啦,这里,我选择的是 有道翻译
在这里插入图片描述
这个页面,在左边输入文字,那么浏览器会把你输入的信息传输给服务器。再返回对应的内容。这就是一个典型的Post操作。我们可以在XHR中查看数据的传送方式
1.png
reques url 就是我们要请求的网址
在这里插入图片描述
fromdata里面就是我们要提交的数据

  1. i:需要翻译的内容
  2. from:翻译内容的语言
  3. to:翻译成什么语言
    所以可以通过改变from/to,来实现不同语言之间的翻译,而后面的salt,sign,its目前还看不懂,这正是后面要破解的有道翻译的反爬机制。

2 .破解反爬

普通的破解方法是将请求网址https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule中的_o去除,经过测试,这样只能实现简单的中英互译
在这里插入图片描述
在这里插入图片描述
而当我想中文翻译成韩文
在这里插入图片描述
ko表示韩文缩写在这里插入图片描述
出来的却是英文经过多次实验发现,这个方法只能中英互译或者将其他语言翻译成中文,无法通过改变from/to来改变翻译。所以得尝试去破解fromdata里面的之前看不懂的参数。
在js中,找到fanyi.min.js
在这里插入图片描述
复制这一段代码var r=function(e){var t=n.md5(navigator.appVersion),r=""+(new Date).getTime(),i=r+parseInt(10*Math.random(),10);return{ts:r,bv:t,salt:i,sign:n.md5(“fanyideskweb”+e+i+“Tbh5E8=q6U3EXe+&L[4c@”)}};在代码格式化网站格式化一下


```javascript
在这里插入代码片
```var r = function(e) {
    var t = n.md5(navigator.appVersion),
    r = "" + (new Date).getTime(),
    i = r + parseInt(10 * Math.random(), 10);
    return {
        ts: r,
        bv: t,
        salt: i,
        sign: n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@")
    }
};

通过观察
e:我们需要翻译的内容
t:app版本的MD5值,这个只要版本不变这个值就不会变,所以t的值可以在fromdata里面找到
r:当前时间戳
i:r+0到10之间的一个随机数
返回的数据就是我们fromdata中看到的数据
ts:r
bv:固定值,这个没什么影响
salt:i
sign:“fanyideskweb”+e+i+一段看不懂的字符串的md5值,这个字符串也会变化,但应该很久才变化一次,当我们某次获取翻译失败时,可以再次从fanyi.min.js获取这段字符串。接下来就可以写代码实现我们的爬虫了。

3. 爬虫代码

这里主要写反爬部分的代码,完整源码在后面。
在这里插入图片描述
通过前面的分析我们知道想要翻译成不同语言,需要知道不同语言的代号,
观察网页源代码发现所有的语言代号都在ul标签下,所以这里我们也可以通过爬虫获取。
在这里插入图片描述
在这里插入图片描述
接下来就是UI界面了,我选用的是python自带的tkinter库

4. UI界面

这里简单介绍主要用到的几个控件
创建窗口:window=tkinter.TK()
窗口标题: window.title(“标题名”)
button按钮:按钮控件;在程序中显示按钮。
text控件:格式化文本显示。允许你用不同的样式和属性来显示和编辑文本。同时支持内嵌图象和窗口。
combobox:tkinter子类ttk的模块,时间下拉列表
label:标签
我的UI界面的最终样式
在这里插入图片描述

想了解跟多tkinter可参考博客

5.完整源码

import hashlib
import json
import random
import time
from tkinter import END,Button, Entry, Label, Scrollbar, StringVar, Text, Tk,messagebox
from tkinter.ttk import Combobox

import requests
from lxml import etree
list1=['自动检测语言', '中文\xc2英语', '英语\xc2中文', '中文\xc2日语', '日语\xc2中文', '中文\xc2韩语', '韩语\xc2中文', '中文\xc2法语', '法语\xc2中文', '中文\xc2德语', '德语\xc2中文', '中文\xc2俄语', '俄语\xc2中文', '中文\xc2西班牙语', '西班牙语\xc2中文', '中文\xc2葡萄牙语', '葡萄牙语\xc2中文', '中文\xc2意大利语', '意大利语\xc2中文', '中文\xc2越南语', '越南语\xc2中文', '中文\xc2印尼语', '印尼语\xc2中文', '中文\xc2阿拉伯语', '阿拉伯语\xc2中文', '中文\xc2荷兰语', '荷兰语\xc2中文', '中文\xc2泰语', '泰语\xc2中文']
list2=[['AUTO', 'AUTO'], ['zh-CHS', 'en'], ['en', 'zh-CHS'], ['zh-CHS', 'ja'], ['ja', 'zh-CHS'], ['zh-CHS', 'ko'], ['ko', 'zh-CHS'], ['zh-CHS', 'fr'], ['fr', 'zh-CHS'], ['zh-CHS', 'de'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值