TL;DR
bozo_execption
>>> import feedparser
>>>
>>> resp1 = feedparser.parse('http://qiita.com/tags/python/feed')
>>> type(resp1)
<class 'feedparser.FeedParserDict'>
>>>
>>> resp2 = feedparser.parse('http://qiita.com/tags/python1/feed')
>>> type(resp2)
<class 'feedparser.FeedParserDict'>
feedparser.parse ()
gibt feedparser.FeedParserDict
unabhängig von der angegebenen URL zurück.
Das ist etwas unpraktisch, deshalb habe ich beschlossen, mir den Inhalt anzusehen.
Variablennamen | URL | |
---|---|---|
resp1 | http://qiita.com/tags/python/feed | Gewöhnlicher RSS-Feed |
resp2 | http://qiitta.com/tags/python | Kein RSS-Feed |
resp3 | http://qiita.com/tags/python1/feed | Statuscode anders als 200 |
resp4 | http://qiitta.com/tags/python/feed | Nicht vorhandene Domain |
>>> resp1.keys()
dict_keys(['bozo', 'encoding', 'status', 'etag', 'href', 'entries', 'version', 'namespaces', 'feed', 'headers'])
>>>
>>> resp2.keys()
dict_keys(['bozo', 'encoding', 'status', 'bozo_exception', 'etag', 'href', 'entries', 'version', 'namespaces', 'feed', 'headers'])
>>>
>>> resp3.keys()
dict_keys(['bozo', 'encoding', 'bozo_exception', 'status', 'href', 'entries', 'version', 'namespaces', 'feed', 'headers'])
>>>
>>> resp4.keys()
dict_keys(['bozo', 'entries', 'feed', 'bozo_exception'])
>>>
Unerwartet sind die Tasten, die ich halte, unterschiedlich. Nur "Bozo" und "Einträge" sind üblich.
>>> resp1.bozo
0
>>> resp1.entries
[{'summary': '<p>Kapitel 8 beschreibt das grafische Modell. Ein grafisches Modell ist eine Methode zum grafischen Ausdrücken von Beziehungen wie stochastischen Variablen und Modellparametern.
#Abkürzung
}]
>>>
>>> resp2.bozo
1
>>> resp2.version
''
>>> resp2.entries
[]
>>>
>>> resp3.bozo
1
>>> resp3.version
''
>>> resp3.entries
[]
>>>
>>> resp4.bozo
1
>>> resp4.entries
[]
>>>
Zu diesem Zeitpunkt kann nur dann, wenn ** bozo
0 ist, davon ausgegangen werden, dass der RSS-Feed erfolgreich analysiert wurde **.
Wenn Sie sich nur den ursprünglichen Hauptzweck ansehen, ist dieser fast vollständig, aber lassen Sie uns etwas tiefer gehen.
Sie können mit "Einträgen" spielen, ohne über das Ergebnis einer erfolgreichen Analyse nachzudenken. Von nun an werde ich prüfen, welche Informationen zum Zwecke der Fehlerbehandlung bei Analysefehlern abgerufen werden können.
Wenn Sie resp1 und resp2 vergleichen, sehen Sie HTTP-ähnliche Schlüssel wie "status" und "headers", wahrscheinlich weil beide Anforderungen erfolgreich waren.
Inzwischen gab es einen Schlüssel, der nur in resp2 existiert. Das ist bozo_exception
.
>>> resp2.bozo_exception
SAXParseException('undefined entity',)
Es enthielt diese anständige Nachricht. Betrachtet man dies, so scheint es fast kein Problem zu geben.
resp3,resp4
>>> resp3.bozo_exception
NonXMLContentType('text/html; charset=utf-8 is not an XML media type',)
>>>
>>> resp4.bozo_exception
URLError(gaierror(8, 'nodename nor servname provided, or not known'),)
>>>
Wenn man sich andere Antworten ansieht, sieht es so aus. Der Nachteil ist, dass es schwierig ist, nur die darin enthaltene Zeichenfolge auszugeben.
Außerdem versucht resp3
trotz 404 Not Found
zu analysieren. Wenn Sie also einen Status haben, ist es eine gute Idee, sich diesen ebenfalls anzusehen.
Recommended Posts