Lendo coleções de elementos estendidos em um RSS feed com Universal de alimentação Analisador

StackOverflow https://stackoverflow.com/questions/241503

  •  04-07-2019
  •  | 
  •  

Pergunta

Existe alguma maneira de ler uma coleção de elementos de extensão com Universal de alimentação Analisador ?

Este é apenas um pequeno trecho de alimentação 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>

Eu tentei o seguinte:

>>> 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 retornos somente última kuler:swatchHexColor. Existe alguma maneira de recuperar todos os elementos com feedparser?

Já trabalhei em torno da questão usando minidom, mas eu gostaria de usar Universal de alimentação Analisador se possível (devido a muito simples API). ele pode ser estendido? Eu não encontrei nada sobre isso na documentação, por isso, se alguém tem mais experiência com a biblioteca, por favor, me avisem.

Foi útil?

Solução

Universal de alimentação Analisador é muito bom para a maioria dos feeds, mas para feeds estendidos, você pode querer tentar algo chamado BeautifulSoup . É um XML / HTML / XHTML análise biblioteca que é originalmente projetado para screenscraping; Acontece que também é brilhante para este tipo de coisa. A documentação é muito bom, e ele tem uma API auto-explicativo, por isso, se você está pensando de usar qualquer outra coisa, é o que eu recomendo.

Eu provavelmente usá-lo como este:

>>> 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']

Assim, você pode provavelmente começar a idéia de que esta é uma biblioteca muito legal. Não seria muito bom se você estivesse analisar qualquer feed RSS de idade, mas porque os dados são do Adobe Kuler, você pode ter certeza que ele não está indo para variar o suficiente para quebrar seu aplicativo (ou seja, é uma fonte confiável o suficiente).

Pior ainda é tentar analisar formato .ase maldita da Adobe. Eu tentei escrever um analisador para ele e ele ficou realmente horrível, muito rapidamente. Ug. Então, sim, os feeds RSS são provavelmente a maneira mais fácil de interagir com Kuler.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top