2017-10-11 4 views
0

J'utilise feedparser pour lire dans un flux XML qui fonctionne correctement et je peux parcourir tous les attributs de niveau 1 mais je suis incapable d'accéder à tout ce qui est inférieur au niveau un.Python 3.6: Problème avec Feedparser avec sous-attributs

Par exemple, je suis incapable de retirer tous les attributs de links.

Toute aide grandement appréciée.

code

import feedparser 

feed = feedparser.parse("https://dev.test.com/feed.xml") 

for post in feed.entries: 
    print(post.title) # Works 
    print(post.links.rel) # Doesn't work 
    print(post.links[0].rel # Doesn't work 

sortie de poste variable

{ 
    'title': 'test title of article' 
    , 'links': [ 
     { 
      'rel': 'alternate' 
      , 'type': 'text/html' 
      , 'href': 'http://dev.test.com/test-link' 
     } 
     , { 
      'length': '0' 
      , 'type': 'image/jpeg' 
      , 'href': 'http://dev.test.com/test-link.jpg' 
      , 'rel': 'enclosure' 
     } 
    ] 
    , 'link': 'http://dev.test.com/test-link' 
    , 'published': 'Tue, 10 Oct 2017 19:21:00 +0100' 
} 
+0

Pourriez-vous inclure la ligne sur laquelle vous importez le module/classe feedparser? – slackmart

+0

@slackmart, ajouté là-bas. – llanato

+0

Un exemple de flux serait bien. Et quelle version de feedparser et python utilisez-vous? – uphill

Répondre

2

Les deux .rel et ['rel'] devrait fonctionner:

>>> import feedparser 
>>> feed = feedparser.parse('https://lwn.net/headlines/newrss') 
>>> feed.entries[0].links[0].rel 
'alternate' 
>>> feed.entries[0].links[0]['rel'] 
'alternate' 

Comme t il type d'une entrée est FeedParserDict:

>>> type(feed.entries[0].links[0]) 
<class 'feedparser.FeedParserDict'> 

qui implémente __getattr__, voir: help(feed.entries[0].links[0]).