2016-10-18 251 views
-1

我試圖從NYT API中提取特定文章的URL。 這是我的代碼:JSON請求中的KeyError Python - NYT API

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 URL後,它給了我這個錯誤

KeyError: 'response' 

但是通過檢查隨機頁面鍵「響應」存在於任何人。我能做些什麼來打印下一頁88頁的所有網址?

+0

嘗試打印出數據的值。你看到一個名爲'response'的密鑰嗎? –

+0

「響應」鍵位於查詢的任何頁面中。如果我從任何一頁打印網址,我會得到正確的數據。不過,我想用一個循環就 –

+0

這是JSON結構:{ 「迴應」:{ 「元」:{ 「命中」:28996, 「時間」:247, 「偏移」:30 }, 「docs」:[ {{「web_url」:「http://www.nytimes.com/2010/07/25/opinion/25hartley.html」, –

回答

0

你假設至少有101頁發出請求(0到100)。

如果向第100頁發出請求,是否仍然使用response鍵獲得相同的JSON結構?

你應該改用的是一個while循環,當你得到一個KeyError時會中斷。

0

喲我遇到了類似的問題。您可能要求速度超過每秒5個允許的限制。在那種情況下,NYT服務器將會給你一個錯誤信息,所以不會有'響應'鍵。我建議打印出的鑰匙從每一個使用類似GET請求:

打印dict.keys(數據)

如果你總是看到「消息」作爲你的鑰匙之一,那麼你知道你可能要求太快。所以只需要放入一個time.sleep(0.5)來減慢速度,你應該很好。