使用python抓取网页数据,了解动态更新数据的抓取方法。
以Bing为用户代理,在‘知网翻译助手’中输入索引‘love’,抓取实时更新的网页数据,初步代码如下:
import requests
import json
# 1 define url
url = 'https://dict.cnki.net'
# 2.1 ua pakege
ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111\
.0.1661.41'
header = {
'headers':ua
}
# 2.2 attribute definition
kw = input('please enter index:')
data = {
'words':kw
}
# 2.2 excute request
# 3 get response
response = requests.post(url = url, data = data, headers = header)
dic_obj = response.json()
# 4 sustainably storing
filename = kw + '.json'
fp = open(filename,'w',encoding = 'utf-8')
json.dump(dic_obj,fp = fp,ensure_ascii=False)
print('Successfully storing!!!')
运行后发现报错:
经了解后发现,是 url 错误,这里的url是知网翻译助手网址,而不是填入索引后的动态更新url,导致获取到的响应数据并非jsom.格式,因此出现Json解码错误提示。
用开发者工具进行检查发现urL应设置为:
调整后运行,虽然代码运行无误,但是结果文件 love.json内容只有:
然而,当url分别换成 ‘百度翻译’和‘有道翻译’后,改动参数与结果文件分别为:
有道翻译
url = 'https://dict.youdao.com/keyword/key'
………
data = {
"text":kw
}
百度翻译
url = 'https://fanyi.baidu.com/sug'
……
data = {
'kw':kw
}
可以发现,针对百度翻译的代码能够很好地抓取到目标翻译数据,有道翻译的数据没有拿到想要的数据,初步怀疑是url 或 data参数 没有设置正确。
而上面的 知网翻译助手只有 “401”,猜测:可能是因为需要有使用权限(如高校IP)才会实时更新索引的翻译结果,但这部分代码中并没有涉及这个功能,因此出现401 拒绝服务的响应。
后续保留这个问题继续学习和探索。