如何使用 api url 返回 null 抓取动态 web?

How to crawl dynamic web with api url returning null?

提问人:leonbear 提问时间:3/19/2019 最后编辑:INDRAJITH EKANAYAKEleonbear 更新时间:3/19/2019 访问量:132

问:

我有一个任务是抓取所有普利策奖得主,我发现这个页面有我想要的一切:https://www.pulitzer.org/prize-winners-by-year/2018

但是我遇到了以下问题,

问题 1:如何抓取动态页面?我使用 python/urllib2.urlopen 来获取页面的内容,但这个动态页面不会从中返回真实内容。

问题 2:然后,我从devtool中找到了一个API URL:https://www.pulitzer.org/cache/api/1/winners/year/166/raw.json。但是当我从 urllib2.urlopen 发送 GET 请求时,我总是得到 null。它是如何发生的?或者我该如何处理它?

如果这对你来说太幼稚了,请说出一些词,以便我可以从谷歌学习。

提前致谢!

python 网络爬虫 urllib2 动态页面

评论


答:

1赞 Jithin P James 3/19/2019 #1

一种处理方法是使用 requests 模块创建会话。这样,它会传递下一次 api 调用所需的必要会话详细信息,您还必须将另一个参数 Referer 传递给标头。这会区分您在 api 调用中查找的年份。

import requests
s = requests.session()
url = "https://www.pulitzer.org/prize-winners-by-year/2017"
resp1 = s.get(url)
headers = {'Referer': 'https://www.pulitzer.org/prize-winners-by-year/2017'}
api = "https://www.pulitzer.org/cache/api/1/winners/year/166/raw.json"
data = s.get(api,headers=headers)

现在,您可以从 data 中的响应中提取数据。

评论

0赞 leonbear 3/19/2019
谢谢!所以看来 Referer 是关键?您的解决方案有效,现在我正在寻找我没有学到的细节......再次感谢!