安装requests库以及了解AJAX请求
打开百度翻译网址,随便输入一个英文单词,我们可以发现网页进行了局部刷新,而非整体性的,因此我们可以猜测,这是一个AJAX请求。
F12打开控制台,点击网络(network),因为我们已经猜测这是一个AJAX请求,因此我们选择XHR(实现网页得局部刷新)或者叫Fetch/XHR。然后输入一个英文单词,例如write。
我们挨个点击,通过查看表单数据,(ps:如果你没有在标头选项卡下找到表单数据,一般在标头选项卡最下方,可以点击负载就能够找到表单数据)发现有五个sug分别是w、wr、wri、writ、write。因此翻译结果很有可能就在这里,通过查看我们发现url为
https://fanyi.baidu.com/sug
请求方式为post请求,响应标头Content-Type(服务器端返回给客户端的数据类型):为json格式的数据。点击响应,我们可以看到是unicode编码的内容,将内容转译为中文(搜索unicode转中文即可),就是我们要的翻译内容。点击预览,也可以看到就是我们要的翻译内容。
首先,由于网站有UA检测反爬,我们进行UA伪装
headers = {"User-Agent": "自己浏览器的标识"}
输入url:
url = "https://fanyi.baidu.com/sug"
因为这个url是post请求,并且携带一个参数,类型为字典,键为kw,值为我们所输入的英文
en = input("请输入要翻译的英文:")
data = {
"kw": en
}
接着调用requests.post方法,其第一个参数为url、第二个参数为网址所携带的数据、第三个为hearders。
response = requests.post(url,data=data,headers=headers)
由上可知,服务器所返回的数据是json格式的数据,因此我们将所获得的内容解析成json格式传给result。
result=response.json()
result是一个字典,我们只需要键data下的内容。然后我们可以选择直接打印
result = result["data"]
print(result)
或者进行存储
filename = en+".json"
with open(filename,"w",encoding="utf-8") as fp:
json.dump(result,fp=fp,ensure_ascii=False)
print("yes")
需要注意的是因为json内容中含有中文,因此不能使用ascii码进行编码,要写上ensure_ascii=False。
以下是全部代码:
import requests
import json
headers = {
"User-Agent": "xxx"}
en = input("请输入要翻译的英文:")
url = "https://fanyi.baidu.com/sug"
data = {
"kw": en
}
response = requests.post(url,data=data,headers=headers)
result=response.json()
result = result["data"]
filename = en+".json"
with open(filename,"w",encoding="utf-8") as fp:
json.dump(result,fp=fp,ensure_ascii=False)
print("yes")
PS:网站的反爬机制并非一成不变,因此代码具有时效性,截至文章发出,代码仍然可用。
PS:大一新生学习第二天,勿喷。如有错误,烦请指正,谢谢!