Eu tenho uma seqüência de caracteres que é codificada em HTML:
'''<img class="size-medium wp-image-113"\
style="margin-left: 15px;" title="su1"\
src="http://blah.org/wp-content/uploads/2008/10/su1-300x194.jpg"\
alt="" width="300" height="194" />'''
Eu quero mudar isso para:
<img class="size-medium wp-image-113" style="margin-left: 15px;"
title="su1" src="http://blah.org/wp-content/uploads/2008/10/su1-300x194.jpg"
alt="" width="300" height="194" />
Quero que isso seja registrado como HTML para que seja renderizado como uma imagem pelo navegador em vez de ser exibido como texto.
A cadeia de caracteres é armazenada assim porque estou usando uma ferramenta de raspagem da Web chamada BeautifulSoup
, "varre" uma página da Web e obtém determinado conteúdo, depois retorna a string nesse formato.
Eu descobri como fazer isso em C #, mas não em Python . Alguém pode me ajudar?
Relacionado
fonte
html.parser.HTMLParser().unescape()
foi descontinuado em 3.5. Use emhtml.unescape()
vez disso.Com a biblioteca padrão:
Escape de HTML
Desescape HTML
fonte
HTMLParser
precisa ser subclassificado, informado sobre o que fazer com todas as partes de qualquer objeto em que ele é alimentado e depois alimentado o objeto a ser analisado, como visto aqui . Além disso, você ainda desejará usar oname2codepoint
dict para converter cada identidade html no caractere real que ela representa.HTMLParser
não poderia funcionar como desejávamos, se colocarmos uma entidade HTML nela. Talvez eu deva renomearhtmlparser
para_htmlparser
, a fim de ocultá-lo, e apenas expor ounescape
método para ser como uma função auxiliar.from html import unescape
, em vezPara codificação html, há o cgi.escape da biblioteca padrão:
Para decodificação html, eu uso o seguinte:
Para algo mais complicado, eu uso BeautifulSoup.
fonte
Use a solução de daniel se o conjunto de caracteres codificados for relativamente restrito. Caso contrário, use uma das inúmeras bibliotecas de análise de HTML.
Eu gosto do BeautifulSoup porque ele pode lidar com XML / HTML malformado:
http://www.crummy.com/software/BeautifulSoup/
para sua pergunta, há um exemplo na documentação deles
fonte
from bs4 import BeautifulSoup
BeautifulSoup("Sacré bleu!").contents[0]
No Python 3.4 ou superior:
fonte
Veja na parte inferior desta página no wiki do Python , há pelo menos duas opções para "desescape" do html.
fonte
O comentário de Daniel como resposta:
"a fuga ocorre apenas no Django durante a renderização do modelo. Portanto, não há necessidade de uma remoção de escape - basta dizer ao mecanismo de modelagem para não escapar. {{context_var | safe}} ou {% autoescape off%} {{context_var}} { % endautoescape%} "
fonte
Encontrei uma boa função em: http://snippets.dzone.com/posts/show/4569
fonte
 
que deve decodificar para a mesma coisa que 
e
.Se alguém estiver procurando uma maneira simples de fazer isso através dos modelos django, você sempre pode usar filtros como este:
Eu tinha alguns dados provenientes de um fornecedor e tudo o que publiquei tinha tags html realmente escritas na página renderizada, como se você estivesse olhando a fonte. O código acima me ajudou muito. Espero que isso ajude os outros.
Felicidades!!
fonte
Mesmo que essa seja uma pergunta muito antiga, isso pode funcionar.
Django 1.5.5
fonte
"��"
. Depois de outroresult.encode('utf-16', 'surrogatepass').decode('utf-16')
, finalmente recebi o original de volta.Encontrei isso no código-fonte Cheetah ( aqui )
não sei por que eles invertem a lista, acho que isso tem a ver com a maneira como codificam, portanto, com você, talvez não seja necessário revertê-lo. Além disso, se eu fosse você, eu mudaria o htmlCodes para ser uma lista de tuplas, em vez de uma lista de listas ... isso acontece na minha biblioteca :)
Notei que seu título também pediu codificação, então aqui está a função de codificação do Cheetah.
fonte
Você também pode usar o django.utils.html.escape
fonte
Abaixo está uma função python que usa o módulo
htmlentitydefs
. Não é perfeito. A versãohtmlentitydefs
que eu tenho está incompleta e assume que todas as entidades decodificam para um ponto de código errado para entidades como≂̸
:http://www.w3.org/TR/html5/named-character-references.html
Com essas advertências, aqui está o código.
fonte
Essa é a solução mais fácil para esse problema -
A partir desta página .
fonte
Pesquisando a solução mais simples dessa questão no Django e Python, descobri que você pode usar as funções internas para escapar / retirar o código html.
Exemplo
Salvei seu código html
scraped_html
eclean_html
:Django
Você precisa do Django> = 1.0
escapar
Para desescape seu código html raspado, você pode usar django.utils.text.unescape_entities que:
escapar
Para escapar do seu código html limpo, você pode usar o django.utils.html.escape que:
Pitão
Você precisa de Python> = 3.4
escapar
Para remover o escape do código html raspado, você pode usar o html.unescape que:
escapar
Para escapar do seu código html limpo, você pode usar o html.escape que:
fonte