有道翻译爬虫实战

本文介绍了如何使用Python模拟浏览器行为,通过有道翻译的POST请求获取翻译结果,详细分析了请求头与Form Data,揭示了有道翻译的反爬策略,并提供了两种绕过反爬的方法。主要内容包括利用urllib库发送请求,解析json数据,以及生成salt、sign、lts等关键参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

   学习爬虫也有一段时间了,但始终感觉自己脑袋空空,好像会了不少,又好像啥也不会。后经高人指点,顿觉自己在学习方法上存在问题!遂决定以后把自己的所学、所见、所思完整的记录下来,既能做以后回顾之用,又能启发后来人,岂不妙哉。好了,废话不多说,让我们进入正题。

准备工作

工具

语言:万能的python
操作系统:windows7
IDE:pycharm
解释器:python 3.7.3
文本工具:sublime text
浏览器:Chrome

知识点

1.urllib库,关于python3的urllib库的使用可以参考下面链接:
点击我进行传送
2.json库,我们需要用到json.loads()方法将json数据转换为Python对应的数据(本文中主要是转换成字典和列表的形式),与其对应的是json.dumps()方法,本文不涉及就不多说了。
3.python的一些其他库:random库、time库、hashlib库,具体用途后面会说。

正文部分

实地考察

   俗话说,知己知彼,百战不殆。我们只有了解了有道翻译的运行机制,才能利用爬虫在其中获取我们想要的数据。打开浏览器(这里用的是Chrome),进入浏览器的翻译页面,在浏览器页面点击鼠标右键进入检查选项:[图1]
图1
选择Network[图2]
在这里插入图片描述
   我们要通过浏览器自带的抓包工具来抓取一些数据包,搞明白在按下翻译按钮后,浏览器和有道翻译的服务器之间做了怎样的交互。下面在文本框内输入“hello”,看看抓到了哪些包:[图3]
在这里插入图片描述
先看第一项,点击第一项然后观察右侧:[图4]
在这里插入图片描述
   可以看到Request Method这一项为post,通常情况浏览器大多使用post和get方式向服务器发送请求(当然还有其他方式)。其中post请求的安全性比get请求更高,至于二者的区别不在本文范围内,这里有道翻译使用的是post请求方式(post请求通常可以传输较大的数据量,而则get不能)。继续往下翻:[图5]
在这里插入图片描述
   这里的Form Data就是浏览器向有道翻译的服务器发送的内容,可以看到,i值对应的正是我们输入的要翻译的文字,这个表单正是浏览器向服务器发送post请求时提交的数据。再点击与上方Headers处在同一行的Response,这一项是服务器给浏览器的响应(回复):[图6]
在这里插入图片描述
   可以看到这是一个json数据,其中键“tgt”对应的值正是我们想要的翻译结果,键“src”对应的是我们输入的待翻译文字。至此,由以上分析我们可以大致知道,在我们点击“翻译”按钮以后,浏览器向有道翻译的服务器以post请求的方式提交了数据(数据就是之前Form Data里的内容),然后浏览器给我们回复了一个json的数据,其中就包含了翻译的结果。现在我们只要利用python模拟浏览器的行为向服务器发送请求,我们接收到浏览器的响应(回复)的json数据之后再分析、提取出翻译的结果即可。那么我们应该向哪里发送请求呢,还记得图4吗,在图4的Request URL一项中对应的值正是数据提交的地址我们只需将数据发送到这里即可。

编写代码

from urllib import request, parse


def translateSpider(e):

    url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
Python爬虫有道是一个利用Python编程语言来实现的自制有道翻译词典。通过使用Python爬虫技术,可以获取用户输入的内容,并将其发送给有道翻译网站进行翻译。下面是一个利用Python爬虫实现有道翻译的示例代码: ```python import requests import json while True: word = input('请输入你要翻译的内容:') url = 'http://fanyi.youdao.com/translate' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'} data = { 'i': word, 'doctype': 'json', } response = requests.post(url, headers=headers, data=data) dict_str = json.loads(response.content.decode()) translation = dict_str['translateResult'][0][0]['tgt'] print(translation) if word == '1': break ``` 这段代码使用requests库向有道翻译网站发送POST请求,并传递了要翻译的内容。然后,解析返回的JSON数据,提取翻译结果,并将其打印出来。用户可以连续输入多个翻译内容,输入"1"结束程序的运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [教你用Python爬虫自制有道翻译词典](https://blog.youkuaiyun.com/xiaoxijinger/article/details/115369417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python爬虫实战之爬取有道翻译](https://blog.youkuaiyun.com/m0_62036306/article/details/121395333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值