Chegando caracteres internacionais a partir de uma página da web?[duplicado]
Pergunta
Esta pergunta já tem uma resposta aqui:
- Decodificar entidades HTML em Python cadeia? 5 respostas
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.
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>ÄÄ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.