Pergunta

Esta pergunta já tem uma resposta aqui:

Eu quero raspar algumas informações fora uma bola de futebol (soccer) página da web simples usando python regexp s.O problema é que jogadores como o primeiro cap, ÄÄRITALO, surge como ÄÄRITALO!
O que é html usa escapou da marcação para os caracteres especiais, como Ä

Existe uma maneira simples de ler o html para a correta python cadeia?Se ele foi XML/XHTML seria fácil, o analisador iria fazê-lo.

Foi útil?

Solução

Eu recomendo BeautifulSoup para HTML raspagem.Você também precisa dizer para converter entidades HTML para Unicode correspondente caracteres, assim:

>>> from BeautifulSoup import BeautifulSoup    
>>> html = "<html>&#196;&#196;RITALO!</html>"
>>> soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
>>> print soup.contents[0].string
ÄÄRITALO!

(Seria bom se o padrão codecs módulo inclui um codec para isso como, por exemplo, que você pode fazer "some_string".decode('html_entities') mas, infelizmente, ele não!)

EDITAR: Outra solução:Desenvolvedor Python Fredrik Lundh (autor de elementtree, entre outras coisas) tem uma função para unsecape entidades HTML em seu site, que trabalha com decimal, hexadecimal e entidades nomeadas (BeautifulSoup não irá funcionar com o hex queridos).

Outras dicas

Tente usar BeautifulSoup.Ele deve fazer o truque e dar-lhe uma bem formatada DOM para trabalhar com o bem.

Este blog entrada parece ter tido algum sucesso com ele.

Eu não tentei me, mas você já tentou

http://zesty.ca/python/scrape.html ?

Ele parece ter um método htmldecode(texto), que iria fazer o que você quer.

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