【Python 爬虫初级教程 02】爬取百度翻译查询英文单词

温馨提醒:请勿滥用爬虫!


材料准备

环境介绍:

  • 系统:Windows 10 Version 22H2
  • Python 版本:v3.10.9
  • 浏览器:Google Chrome 版本 111.0.5563.147 正式版本 64 位 (其他浏览器操作方法相似)

需要用到的网站:

部分准备工作已省略,参见 【Python 爬虫初级教程】手把手教你爬取12306网站列车车次信息

寻找文件数据

访问 百度翻译主页,按下 F12,清空网络日志,点击 “Fetch/XHR”。
在输入框尝试输入 “s”,得到下图数据:
图片 - 图示1

逐一查看数据内容,可以发现,在 https://fanyi.baidu.com/sug 中包含简明的翻译信息。比对网页内容,信息位于搜索联想区域。
图片 - 图示2

数据这次请求的方式与上次不同,爬取 12306 是用的 GET 方法,直接可以拿到数据。但百度翻译的请求链接使用 POST,需要传参给服务器等其响应。具体 GET 与 POST 的区别可见 GET 和 POST 的区别? | 知乎

点击 载荷,表单数据即需要传参为 kw,值为需搜索的单词。
图片 - 图示3
点击 预览,服务器返回参数为 json 。

在 py 中,可以使用以下代码发送 POST 请求:

1
2
import requests
response = requests.post(url, data=dat)
图片 - post()官方注释

url 参数为请求链接,data 为需传参内容,字典类型。

代码部分

根据上面的分析,请求链接得到数据:

1
2
3
4
5
6
7
8
9
10
11
import requests

url = 'https://fanyi.baidu.com/sug'
answer = input('请输入你要翻译的英文单词:')
dat = {
'kw': answer
}

response = requests.post(url, data=dat)
text = response.json() # 将服务器返回的内容直接处理成 dict
response.close()

接下来进行数据处理:

1
2
3
4
5
6
7
lst = text['data']
if lst:
print('可能的结果为:')
for i in lst:
print(f"\t{lst.index(i) + 1}. {i['k']}\t\t{i['v']}")
else:
print('未找到该单词的释义。')

【Python 爬虫初级教程 02】爬取百度翻译查询英文单词

http://blog.junewind.top/p/c2adb882/

作者

JuneWind

发布于

2023-08-02

更新于

2023-08-02

许可协议

评论