Python FeedParser с Yahoo погоды RSS

Я пытаюсь использовать feedparser, чтобы получить некоторые данные из погоды yahoos rss. Похоже, что анализатор каналов удаляет данные из пространства имен yweather:

http://weather.yahooapis.com/forecastrss?w=24260013&u=c

<yweather:condition  text="Fair" code="34"  temp="23"  date="Wed, 19 May 2010 5:55 pm EDT" />

Похоже, feedparser полностью игнорирует это. там, чтобы получить это?

2 ответа

Решение

Вот один из способов получить данные, используя lxml:

import urllib2
import lxml.etree

url = "http://weather.yahooapis.com/forecastrss?w=24260013&u=c"
doc = lxml.etree.parse( urllib2.urlopen(url) ).getroot()
conditions = doc.xpath('*/*/yweather:condition',
                       namespaces={'yweather': 'http://xml.weather.yahoo.com/ns/rss/1.0'})
try:
    condition=conditions[0]
except IndexError:
    print('yweather:condition not found')
print(condition.items())
# [('text', 'Fair'), ('code', '33'), ('temp', '16'), ('date', 'Wed, 19 May 2010 9:55 pm EDT')]

Раздел об использовании xpath с пространствами имен может быть особенно полезен.

Для полноты, feedparser НЕ поддерживает это также. Общий синтаксис - это имя тега подчеркивания префикса пространства имен (например, yweather_condition).

В приведенном примере погоды Yahoo можно сделать:

import feedparser
d=feedparser.parse('http://weather.yahooapis.com/forecastrss?w=24260013&u=c')
print (d['items'][0]['yweather_condition'])

доходность

{'date': u'Mon, 18 Jul 2011 7:53 pm EDT', 'text': u'Fair', 'code': u'34', 'temp': u'27'}

Документация находится по адресу http://www.feedparser.org/docs/namespace-handling.html

Другие вопросы по тегам