视频中讲解的是百度翻译,但是视频中的方法现在已经不适用了,因为他们对 URL 的参数进行了修改,导致没法直接修改参数来爬取对应的翻译结果,这里我使用搜狗翻译来做演示,原理是一样的。
我们搜索的关键字会返回在 URL 中,后面的无用参数可以删除
删除后
前置知识:
翻译相关的页面有个特点:就是你输入单词后不需要其他操作,页面会自动刷新出新的数据(该数据就是翻译结构)
【页面局部刷新的现象】
如下图所示就是请求回来的翻译结果
所以该数据包就是我们需要捕获的数据包
判断返回数据类型是否为 json
编写代码
import requests
import json
if __name__ == '__main__':
post_url = 'https://fanyi.sogou.com/reventondc/suggV3'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0'
}
word = input('enter a word:')
data = {
'from':'auto',
'to':'zh-CHS',
'client':"web",
'text':word,
'uuid':"5c2d6117-a5e9-482e-abaf-2343abcf3a93",
'pid':"sogou-dict-vr",
'addSugg':"on"
}
response = requests.post(url=post_url,data=data,headers=headers)
# json 返回的是一个对象(如果确认响应数据是json类型的才可以使用)
dic_obj = response.json()
print(dic_obj)
file_name = word + '.json'
fp = open(file_name,'w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)
注意:
data 字典里的请求参数要补全,不然无法实现