Python RSS Parser, который также обрабатывает FeedBurner

Я был в процессе написания сценария парсера Python для RSS-каналов. Я использую feedparser, однако я застрял на парсинге каналов из FeedBurner. Кому сейчас нужен FeedBurner? В любом случае..

Например, я не мог найти способ разобрать

http://feeds.wired.com/wired/index

http://feeds2.feedburner.com/ziffdavis/pcmag

Когда я помещаю их в библиотеку feedparser, похоже, что они не работают. Пытался поставить? Fmt = xml или? Format = xml в конце URL-адресов, но все еще не получил формат xml.

Нужно ли мне использовать синтаксический анализатор HTML, такой как BeautifulSoup, для синтаксического анализа каналов FeedBurner? Желательно, существует ли публичный парсер или агрегатор Python скрипт, который уже справляется с этим?

Мы будем благодарны за любой совет или помощь.


person DavidL    schedule 19.04.2011    source источник


Ответы (2)


Возможно, у вас проблема с версией или вы неправильно используете API - это поможет увидеть ваше сообщение об ошибке. Например, с Python 2.7 и feedparser 5.0.1 работает следующее:

>>> import feedparser
>>> url = 'http://feeds2.feedburner.com/ziffdavis/pcmag'
>>> d = feedparser.parse(url)
>>> d.feed.title
u'PCMag.com: New Product Reviews'
>>> d.feed.link
u'http://www.pcmag.com'
>>> d.feed.subtitle
u"First Look At New Products From PCMag.com including Lab Tests, Ratings, Editor's and User's Reviews."
>>> len(d['entries'])
30
>>> d['entries'][0]['title']
u'Canon Color imageClass MF9280cdn'

И с другим URL:

>>> url = 'http://feeds.wired.com/wired/index'
>>> d = feedparser.parse(url)
>>> d.feed.title
u'Wired Top Stories'
>>> d.feed.link
u'http://www.wired.com/rss/index.xml'
>>> d.feed.subtitle
u'Top Stories<img src="http://www.wired.com/rss_views/index.gif" />'
>>> len(d['entries'])
30
>>> d['entries'][0]['title']
u'Heart of Dorkness: LARPing Goes Haywire in <em>Wild Hunt</em>'
person ars    schedule 19.04.2011
comment
Следуя вашей инструкции работает. Спасибо, ars. Должно быть, я постоянно что-то опечатал, так как получал пустой результат для d ['entry'] - person DavidL; 20.04.2011
comment
@DavidL: рад, что теперь это работает. Я хорошо знаком с ошибкой опечатки. :-) - person ars; 24.04.2011

Я знаю, что этот вопрос очень старый, но я полагаю, что он будет полезен любому, кто столкнется с ним, поискав решение для синтаксического анализа RSS-каналов Feedburner, чтобы вставить простой код, который у меня есть для получения последней записи из Feedburner Cracked.com . Я тестировал его на нескольких других сайтах, и он отлично работает.

def GetRSS('RSSurl'):
    url_info = urllib.urlopen(RSSurl)
    if (url_info):
        xmldoc = minidom.parse(url_info)
    if (xmldoc):
        url = xmldoc.getElementsByTagName('link').firstChild.data
        title = xmldoc.getElementsByTagName('title').firstChild.data
        print url, print title

Просто замените RSSurl любым адресом страницы Feedburner. Кроме того, как вы, вероятно, видите, если есть какие-либо другие элементы, которые вам нужны, вы можете просто добавить туда дополнительную строку getElementsByTagName с тем, что вы хотите получить.

Изменить: также, насколько мне известно, будет работать практически с любым RSS-потоком.

person Jordan    schedule 13.02.2012