python爬虫学习day2—百度翻译

##第零步

安装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:大一新生学习第二天,勿喷。如有错误,烦请指正,谢谢!

你可能感兴趣的:(爬虫,学习,python,百度)