本项目来源B站UP主路飞学城视频:视频链接点这里
利用Python爬虫实现百度翻译,获取单词词性以及释义
首先进入百度翻译界面,随机输入一个单词后使用抓包工具,通过对所抓取的包的分析可知,翻译内容存储于一个ajax包sug中。
将该包中的URL粘贴到代码段,即获取了所需发送请求的URL地址
url = 'https://fanyi.baidu.com/sug'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
根据抓包工具所示,该请求为一个post请求,与get请求不同,post请求必须传递参数。在本包中,参数即为所查单词,以’serendipity’为例。
发送请求,传入的参数封装在data字典中:
data = {
'kw': serendipity}
response = requests.post(url=url, data=data, headers=headers)
在抓包工具中查看得知,所返回的响应数据是一串json串,故调用json方法即可获取。
dic_obj = response.json()
对json格式的持久化存储,可导入json模块中的dump进行执行。
fp = open(filename, 'w', encoding='utf-8')
json.dump(dic_obj, fp=fp, ensure_ascii=False) # ensure_ascii=False表示不使用ascii码
以上只是对某个特定的单词进行查询,不能做到对任意单词进行模拟查询,要实现这一点,只需加上一个input(),将data字典中的value值改为input捕获到的值即可。
# -*- coding: utf-8 -*-
# @author : QIN
# @time : 2021/1/10 16:24
# @function :
import requests
import json
if __name__ == '__main__':
# 指定URL
post_url = 'https://fanyi.baidu.com/sug'
word = input('输入查询单词:')
data = {
'kw': word}
# 进行UA伪装
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
# 发送请求
res = requests.post(url=post_url, data=data, headers=header)
dic_obj = res.json()
# 持久化保存
filename = word + '.json'
fp = open(filename, 'w', encoding='utf-8')
json.dump(dic_obj, fp=fp, ensure_ascii=False)
print('结果保存成功!')
以单词’exotic’为例
输入查询单词:exotic
结果保存成功!
用json解析器对生成的json文件进行解析,得如下结果
{
“errno”: 0,
“data”: [{
“k”: “exotic”,
“v”: “adj. 异国的; 外来的; 异乎寻常的,奇异的; 吸引人的 n. 舶来品,外来物; 脱衣舞女”
}, {
“k”: “Exotic”,
“v”: “adj. 外来的,外国来的”
}, {
“k”: “exotica”,
“v”: “n. 异族事物,新奇事物; 尖蕊鸢尾”
}, {
“k”: “Exotica”,
“v”: “[电影]色情酒店”
}, {
“k”: “exotics”,
“v”: “外来植物”
}]
}
下面再次检测三个单词:
输入查询单词:constraint
结果保存成功!
{
“errno”: 0,
“data”: [{
“k”: “constraint”,
“v”: “n. 约束; 限制; 强制”
}, {
“k”: “constraints”,
“v”: “n. 约束; 限制; 强制( constraint的名词复数 )”
}]
}
输入查询单词:paradise
结果保存成功!
{
“errno”: 0,
“data”: [{
“k”: “paradise”,
“v”: “n. 天堂; 乐园; 伊甸园; 极乐”
}, {
“k”: “Paradise”,
“v”: “[地名] [圭亚那、美国、南非共和国、新西兰] 帕拉代斯; [电影]仙境”
}, {
“k”: “PARADISE”,
“v”: “abbr. phased array radar and diverse integrated se”
}, {
“k”: “paradises”,
“v”: “n. 天堂( paradise的名词复数 ); 伊甸园; 完美快乐的境界; 理想[完美]的地方”
}, {
“k”: “Paradise Lost”,
“v”: “n. <失乐园>; [电影]在记忆的森林里”
}]
}
输入查询单词:infinite
结果保存成功!
{
“errno”: 0,
“data”: [{
“k”: “infinite”,
“v”: “adj. 无限的,无穷的; 无数的,许许多多的; 极大的 n. 无限,无穷; [数] 无穷大; <宗”
}, {
“k”: “Infinite”,
“v”: “韩国7人偶像组合”
}, {
“k”: “infinitely”,
“v”: “adv. 极其; 无限地,无穷地”
}, {
“k”: “infinite form”,
“v”: “不定形式”
}, {
“k”: “infinite life”,
“v”: “无限寿命”
}]
}