2016-10-18 5 views
-1

Ich versuche, die URL von bestimmten Artikeln von NYT API zu extrahieren. Dies ist mein Code:KeyError in JSON Anfrage 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"]) 

Nach dem Drucken der ersten 20 URL es mir diesen Fehler durch Überprüfung zufällige Seiten den Schlüssel ‚Antwort‘ jedoch

KeyError: 'response' 

gibt, ist in jedem von ihnen. Was kann ich tun, um alle URLs der nächsten 88 Seiten zu drucken?

+0

Versuchen Sie, den Wert der Daten auszudrucken. Siehst du einen Schlüssel mit dem Namen "response"? –

+0

Der Schlüssel "Antwort" befindet sich auf jeder Seite der Abfrage. Wenn ich die URL von einer einzelnen Seite aus drucke, erhalte ich die richtigen Daten. Allerdings möchte ich für sie eine Schleife verwenden –

+0

Dies ist die JSON-Struktur: { "Antwort": { "meta": { "Hits": 28996, "Zeit": 247, "Offset": 30 }, "docs": [ { "web_url": "http://www.nytimes.com/2010/07/25/opinion/25hartley.html", –

Antwort

0

Sie gehen davon aus, dass mindestens 101 Seiten für Anforderungen benötigt werden (0 bis 100).

Wenn Sie eine Anfrage an Seite 100 stellen, erhalten Sie immer noch die gleiche JSON-Struktur mit einem response Schlüssel?

Was Sie stattdessen verwenden sollten, ist eine While-Schleife, die bricht, wenn Sie eine KeyError erhalten.

0

Yo ich stieß auf ein ähnliches Problem. Sie könnten schneller als das zulässige Limit von 5 pro Sekunde anfordern. In diesem Fall wird der NYT-Server Sie mit einer Fehlermeldung schlagen, so dass es keinen "Antwort" -Schlüssel geben wird. Ich würde vorschlagen, den Schlüssel Druck aus jeder Anforderung wie etwas mit GET:

Druck dict.keys (Daten)

Wenn Sie ‚Nachricht‘ als eine Ihres Schlüssel sehen immer wieder, dann wissen Sie, dass Sie wahrscheinlich zu schnell anfordern. Also lege einfach eine Zeit ein.Schlaf (0.5) um die Dinge zu verlangsamen und du solltest gut sein.