Filtrar tags HTML e resolver entidades em python

votos
16

Porque as expressões regulares me assustar, eu estou tentando encontrar uma maneira de remover todas as tags HTML e resolver entidades HTML de uma string em Python.

Publicado 01/09/2008 em 06:25
fonte usuário
Em outras línguas...                            


8 respostas

votos
40

Use lxml que é a melhor biblioteca xml / html para python.

import lxml.html
t = lxml.html.fromstring("...")
t.text_content()

E se você quiser apenas para higienizar o olhar html no lxml.html.clean módulo

Respondeu 01/09/2008 em 07:07
fonte usuário

votos
15

Use BeautifulSoup ! É perfeito para isso, onde você tem marcação de entrada da virtude duvidosa e precisa obter algo razoável fora dele. Basta passar no texto original, extrair todas as marcas de cordas, e se juntar a eles.

Respondeu 01/09/2008 em 06:53
fonte usuário

votos
6

Embora concorde com Lucas que as expressões regulares não são tão assustador, eu ainda acho que você deve ir com um analisador HTML especializado. Isso ocorre porque o padrão HTML é peludo suficiente (especialmente se você quer analisar arbitrariamente páginas "HTML" retirado da Internet) que você precisa para escrever um monte de código para lidar com os casos de canto. Parece que python inclui um fora da caixa .

Você também deve verificar se os vínculos python para TidyLib que pode limpar HTML quebrado, fazendo com que a taxa de sucesso de qualquer HTML analisar muito maior.

Respondeu 01/09/2008 em 06:49
fonte usuário

votos
4

Como cerca de analisar os dados HTML e extrair os dados com a ajuda do analisador?

Eu tentaria algo como o autor descrito no capítulo 8.3 no livro Dive Into Python

Respondeu 01/09/2008 em 06:35
fonte usuário

votos
2

se você usar o Django você também pode usar http://docs.djangoproject.com/en/dev/ref/templates/builtins/#striptags ;)

Respondeu 28/02/2011 em 16:51
fonte usuário

votos
1

Você pode precisar de algo mais complicado do que uma expressão regular. páginas da web, muitas vezes têm colchetes que não fazem parte de uma tag, como este:

 <div>5 < 7</div>

Decapagem as tags com regex vai retornar a string "5" e tratar

 < 7</div>

como uma única etiqueta e tira-lo para fora.

Sugiro à procura de código já escrito que faz isso para você. Eu fiz uma pesquisa e encontrei este: http://zesty.ca/python/scrape.html Ele também pode resolver entidades HTML.

Respondeu 01/09/2008 em 06:50
fonte usuário

votos
0

Olhando para a quantidade de sentido as pessoas estão demonstrando em outras respostas aqui, eu diria que usando um regex provavelmente não é a melhor idéia para a sua situação. Ir para algo experimentado e testado, e tratar a minha resposta anterior, como uma demonstração de que expressões regulares não precisam ser que assustador.

Respondeu 02/09/2008 em 01:11
fonte usuário

votos
0

As expressões regulares não são assustadores, mas escrever suas próprias expressões regulares para retirar HTML é um caminho certo para a loucura (e não vai funcionar, qualquer um). Siga o caminho da sabedoria, e usar uma das muitas boas bibliotecas de análise de HTML.

exemplo de Lucas também está quebrado porque 'sub' não é um método de uma string Python. Você teria que "import re", em seguida, chamar re.sub (padrão, repl, string). Mas isso não é nem aqui nem lá, como a resposta correta à sua pergunta não envolve escrever quaisquer expressões regulares.

Respondeu 01/09/2008 em 09:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more