TL;DR
feedparser.parse ()
est de regarder la valeur de retour bozo
. La perspective ne réussit que lorsque 0bozo_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 ()
renvoie feedparser.FeedParserDict
quelle que soit l'URL spécifiée.
C'est un peu gênant, alors j'ai décidé de jeter un œil au contenu.
Nom de variable | URL | |
---|---|---|
resp1 | http://qiita.com/tags/python/feed | Flux RSS ordinaire |
resp2 | http://qiitta.com/tags/python | Pas un flux RSS |
resp3 | http://qiita.com/tags/python1/feed | Code d'état autre que 200 |
resp4 | http://qiitta.com/tags/python/feed | Domaine inexistant |
>>> 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'])
>>>
De manière inattendue, les clés que je détiens sont différentes. Seuls les «bozo», les «entrées» sont courants.
>>> resp1.bozo
0
>>> resp1.entries
[{'summary': '<p>Le chapitre 8 décrit le modèle graphique. Un modèle graphique est une méthode d'expression graphique de relations telles que des variables stochastiques et des paramètres de modèle.
#Abréviation
}]
>>>
>>> resp2.bozo
1
>>> resp2.version
''
>>> resp2.entries
[]
>>>
>>> resp3.bozo
1
>>> resp3.version
''
>>> resp3.entries
[]
>>>
>>> resp4.bozo
1
>>> resp4.entries
[]
>>>
À ce stade, seulement lorsque ** bozo
vaut 0, on peut considérer que le flux RSS a été analysé avec succès **.
Si vous ne regardez que l'objectif principal d'origine, c'est presque terminé, mais creusons un peu plus loin.
Vous pouvez jouer avec les «entrées» sans penser au résultat d'une analyse réussie, donc à partir de maintenant, j'irai voir quel genre d'informations peuvent être obtenues aux fins de la gestion des erreurs de l'analyse syntaxique.
Si vous comparez resp1 et resp2, vous pouvez voir des clés de type HTTP telles que status
et headers
, probablement parce que les deux requêtes ont abouti.
Pendant ce temps, il y avait une clé qui n'existe que dans resp2. C'est «bozo_exception».
>>> resp2.bozo_exception
SAXParseException('undefined entity',)
Il contenait ce message décent. En regardant cela, il semble qu'il n'y ait presque aucun problème.
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'),)
>>>
En regardant les autres réponses, cela ressemble à ceci. L'inconvénient est qu'il est difficile de ne sortir que la chaîne de caractères à l'intérieur.
De plus, resp3
essaie d'analyser malgré 404 Not Found
, donc si vous avez un statut, c'est une bonne idée de le regarder également.
Recommended Posts