Estou analisando um pouco de HTML com o Beautiful Soup 3, mas ele contém entidades HTML que o Beautiful Soup 3 não decodifica automaticamente para mim:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
Como decodificar as entidades HTML text
para obter em "£682m"
vez de "£682m"
.
python
html
html-entities
jkp
fonte
fonte
Respostas:
Python 3.4 ou superior
Use
html.unescape()
:O FYI
html.parser.HTMLParser.unescape
está obsoleto e deveria ser removido no 3.5 , embora tenha sido deixado por engano. Ele será removido do idioma em breve.Python 2.6-3.3
Você pode usar
HTMLParser.unescape()
na biblioteca padrão:HTMLParser
html.parser
Você também pode usar a
six
biblioteca de compatibilidade para simplificar a importação:fonte
unescape
método, todo oHTMLParser
módulo foi preterido em favor dehtml.parser
.h.unescape(s).encode("utf-8")
. Os documentos: "" "A definição fornecida aqui contém todas as entidades definidas pelo XHTML 1.0 que podem ser manipuladas usando simples substituição de texto no conjunto de caracteres Latin-1 (ISO-8859-1)" ""Beautiful Soup trata da conversão de entidades. No Beautiful Soup 3, você precisará especificar o
convertEntities
argumento para oBeautifulSoup
construtor (consulte a seção 'Conversão de entidade' dos documentos arquivados). No Beautiful Soup 4, as entidades são decodificadas automaticamente.Sopa bonita 3
Sopa bonita 4
fonte
BeautifulSoup4
usaHTMLParser
, principalmente. Veja a fonteVocê pode usar replace_entities da biblioteca w3lib.html
fonte
Beautiful Soup 4 permite que você defina um formatador para sua saída
fonte
Eu tive um problema de codificação semelhante. Eu usei o método normalize (). Eu estava recebendo um erro Unicode usando o método pandas .to_html () ao exportar meu quadro de dados para um arquivo .html em outro diretório. Acabei fazendo isso e funcionou ...
O objeto dataframe pode ser o que você quiser, vamos chamá-lo de tabela ...
codifique os dados da tabela para que possamos exportá-los para o arquivo .html na pasta de modelos (este pode ser o local que você desejar :))
exportar string normalizada para arquivo html
Referência: documentação unicodedata
fonte
Provavelmente isso não é relevante aqui. Mas, para eliminar essas entidades html de um documento inteiro, você pode fazer algo assim: (Assuma document = page e perdoe o código incorreto, mas se você tiver idéias de como torná-lo melhor, sou todo ouvidos - sou novo em isto).
fonte
.unescape()
faz isso por você . Não entendo por que você e Rob postaram essas soluções complicadas demais que rolam a correspondência de suas próprias entidades quando a resposta aceita já mostra claramente que é.unescape()
possível encontrar entidades na string.