JSON请求中的KeyError Python - NYT API

时间:2016-10-18 11:17:37

标签: python

我正在尝试从NYT API中提取特定文章的URL。 这是我的代码:

import requests

for i in range(0,100):
    page=str(i)
    r = requests.get("http://api.nytimes.com/svc/search/v2/articlesearch.json?begin_date=20100101&q=terrorist+attack&page="+page+"&api-key=***")
    data = r.json()
    article = data['response']['docs']   
    for url in article:
        print(url["web_url"])

打印完第一个20网址后,它会给我这个错误

KeyError: 'response'

然而,通过检查随机页面,其中任何一个都存在密钥“响应”。如何打印接下来88页的所有网址?

2 个答案:

答案 0 :(得分:1)

哟我遇到了类似的问题。您可能要求的速度超过每秒5次允许的限制。在这种情况下,NYT服务器会给您发送错误消息,因此不会有响应'键。我建议使用以下内容从每个GET请求中打印出密钥:

打印dict.keys(数据)

如果你一直看到'消息'作为你的钥匙之一,你知道你可能要求太快。因此,只需加入time.sleep(0.5)即可减慢速度,你应该做得很好。

答案 1 :(得分:0)

您假设至少有101个页面可以发出请求(0到100)。

如果您向第100页发出请求,是否仍然使用response密钥获得相同的JSON结构?

你应该使用的是一个while循环,当你得到KeyError时会中断。