2010-05-20 3 views
1

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

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 полностью игнорирует это. есть ли это, чтобы получить его?

ответ

0

Вот один из способов вы можете получить данные с помощью использования 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')] 

В разделе using xpath with namespaces может быть особенно полезным.

0

Для полноты, 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