4

Universal Feed Parserで拡張要素のコレクションを読み取る方法はありますか?

これは、Kuler RSS フィードからの短いスニペットです。

<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_swatchhexcolorlast のみを返しますkuler:swatchHexColor。ですべての要素を取得する方法はありますfeedparserか?

minidom を使用して既に問題を回避しましたが、可能であれば Universal Feed Parser を使用したいと考えています (非常に単純な API のため)。延長できますか?ドキュメントでそれについて何も見つけられなかったので、誰かがライブラリの経験が豊富な場合は、私にアドバイスしてください。

4

1 に答える 1

3

Universal Feed Parser はほとんどのフィードで非常に便利ですが、拡張フィードでは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 フィードを解析するのはあまり良いことではありませんが、データは Adob​​e Kuler からのものであるため、アプリが壊れるほど変化しない (つまり、十分に信頼できるソースである) ことはほぼ確実です。

さらに悪いことに、Adobe のひどい .ASE 形式を解析しようとしています。私はそれ用のパーサーを書いてみましたが、本当に恐ろしいものになりました。うーん。つまり、RSS フィードは、Kuler とやり取りする最も簡単な方法です。

于 2008-10-28T04:23:48.747 に答える