首先打开百度翻译,进行翻译
![](https://img-blog.csdnimg.cn/1c19c6f924bd47f08dad38f773f432b2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54us5LiA5peg5LqM55qE5p2O54uX6JuL5YS_,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/f767ace0459449d8b08efcbf4cded6ed.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54us5LiA5peg5LqM55qE5p2O54uX6JuL5YS_,size_20,color_FFFFFF,t_70,g_se,x_16)
可以看到每次搜索的单词不同,搜索结果也就不同,其中页面中显示结果的部分,也会随着结果的变化而变化,这种页面局部变化的技术称为AJax。(一会需要用到)
打开开发者选项(F12或点击鼠标左键选择检查),进入Network选择我们要捕获的数据包
因为是数据是通过Ajax技术显示的,所以我们需要选择Ajax对应的数据请求包,也就是XHR
![](https://img-blog.csdnimg.cn/d1439c3508fb4fd3b110a844cdbb3424.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54us5LiA5peg5LqM55qE5p2O54uX6JuL5YS_,size_20,color_FFFFFF,t_70,g_se,x_16)
进入以后,我们随便搜索一个单词,例如:dog
图1
图2
图3
我们可以看到,随着字母的增加,对应的数据包,也在增加,因此,我们只需要选择最终单词的数据包,也就是图3
打开它的数据包,我们发现他是POST请求,并且在response中所携带的数据是一组json数据
![](https://img-blog.csdnimg.cn/5d594385c03f41fabee528f4205bcee6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54us5LiA5peg5LqM55qE5p2O54uX6JuL5YS_,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/c96ebf7514bc4d6e96e26d80e9c76f45.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54us5LiA5peg5LqM55qE5p2O54uX6JuL5YS_,size_20,color_FFFFFF,t_70,g_se,x_16)
了解以上以后,我们开始进行编码实战
#导包:
import requests
import json
post_url = "https://fanyi.baidu.com/sug"
#封装一个data参数,对参数进行处理,因为请求需要参数才能获取响应的数据
data={
"kw":"dog"
}
#请求之前进行伪装
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/15"
}
response = requests.post(url=post_url,data=data,headers=headers)
#获取响应数据
#使用json()方法直接返回一个对象(如果确认服务器的响应数据是json类型的,才可以使用json()方法)
dic_obj = response.json()
#进行持久化存储
fp = open("./dog.json","w",encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)#将dic_obj对象传入fp文件中,因为传入的是文本字符,不能使用ASCII编码,所以将其设为False
print("over")
结果:
![](https://img-blog.csdnimg.cn/63636726c606417aa628c569db94b311.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54us5LiA5peg5LqM55qE5p2O54uX6JuL5YS_,size_20,color_FFFFFF,t_70,g_se,x_16)
当然,这只是一个单词的获取,但我们需要的是无论输入什么单词,它都可以获取到对应的数据
因此,我们还需要对代码进行一些小小的修改
#导包:
import requests
import json
post_url = "https://fanyi.baidu.com/sug"
#封装一个data参数,对参数进行处理,因为请求需要参数才能获取响应的数据
word = input("请输入你想要翻译的单词:")
data={
"kw":word
}
#请求之前进行伪装
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/15"
}
response = requests.post(url=post_url,data=data,headers=headers)
#获取响应数据
#使用json()方法直接返回一个对象(如果确认服务器的响应数据是json类型的,才可以使用json()方法)
dic_obj = response.json()
#进行持久化存储
FileName = word+".json"
fp = open(FileName,"w",encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)#将dic_obj对象传入fp文件中,因为传入的是文本字符,不能使用ASCII编码,所以将其设为False
print("over")
结果:
![](https://img-blog.csdnimg.cn/2b044d6411c348ceb68daa48cf77f796.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54us5LiA5peg5LqM55qE5p2O54uX6JuL5YS_,size_20,color_FFFFFF,t_70,g_se,x_16)