如何使用返回null的api网址抓取动态网络?

时间:2019-03-19 04:02:51

标签: python web-crawler urllib2 dynamic-pages

我有一个任务要抓取所有“普利策冠军”,我发现此页面包含了我想要的全部内容: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。它是怎么发生的?或者我该如何处理?

如果这对于您来说太幼稚,请输入一些单词,以便我可以从Google中学到。

谢谢!

1 个答案:

答案 0 :(得分:1)

一种处理方式是使用请求模块创建会话。这样,它传递了下一个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)

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