有没有办法用Universal Feed Parser读取扩展元素的集合?
这只是Kuler RSS feed的简短片段:
<channel>
<item>
<!-- snip: regular RSS elements -->
<kuler:themeItem>
<kuler:themeID>123456</kuler:themeID>
<!-- snip -->
<kuler:themeSwatches>
<kuler:swatch>
<kuler:swatchHexColor>FFFFFF</kuler:swatchHexColor>
<!-- snip -->
</kuler:swatch>
<kuler:swatch>
<kuler:swatchHexColor>000000</kuler:swatchHexColor>
<!-- snip -->
</kuler:swatch>
</kuler:themeSwatches>
</kuler:themeItem>
</item>
</channel>
我尝试了以下方法:
>>> feed = feedparser.parse(url)
>>> feed.channel.title
u'kuler highest rated themes'
>>> feed.entries[0].title
u'Foobar'
>>> feed.entries[0].kuler_themeid
u'123456'
>>> feed.entries[0].kuler_swatch
u''
feed.entries [0] .kuler_swatchhexcolor仅返回最后一个kuler:swatchHexColor.有没有办法用feedparser检索所有元素?
我已经使用minidom解决了这个问题,但是如果可能的话我想使用Universal Feed Parser(由于非常简单的API).可以延长吗?我在文档中没有找到任何相关信息,所以如果有人对图书馆有更多经验,请告诉我.
解决方法:
Universal Feed Parser非常适合大多数Feed,但对于扩展的feed,你可能想尝试一下名为BeautifulSoup的东西.它是一个XML / HTML / XHTML解析库,最初是为屏幕抓取而设计的;事实证明,这种事情也很棒.文档非常好,它有一个不言自明的API,所以如果你想要使用其他任何东西,那就是我推荐的.
我可能会这样使用它:
>>> import BeautifulSoup
>>> import urllib2
# Fetch HTML data from url
>>> connection = urllib2.urlopen('http://kuler.adobe.com/path/to/rss.xml')
>>> html_data = connection.read()
>>> connection.close()
# Create and search the soup
>>> soup = BeautifulSoup.BeautifulSoup(html_data)
>>> themes = soup.findAll('kuler:themeitem') # Note: all lower-case element names
# Get the ID of the first theme
>>> themes[0].find('kuler:themeid').contents[0]
u'123456'
# Get an ordered list of the hex colors for the first theme
>>> themeswatches = themes[0].find('kuler:themeswatches')
>>> colors = [color.contents[0] for color in
... themeswatches.findAll('kuler:swatchhexcolor')]
>>> colors
[u'FFFFFF', u'000000']
所以你可能会认为这是一个非常酷的库.如果您正在解析任何旧的RSS源,这不会太好,但由于数据来自Adobe Kuler,您可以非常肯定它的变化不足以破坏您的应用程序(即它是一个值得信赖的源).
更糟糕的是试图解析Adobe的该死的.ASE格式.我尝试为它编写一个解析器,它非常可怕,非常快.微克.所以,是的,RSS提要可能是与Kuler接口的最简单方式.