Nasıl HTML kod çözme/kodlama kullanarak Python/Django yapabilirim?
Html olarak kodlanmış bir dize var:
<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" />
Bunu değiştirmek istiyorum:
<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" />
Tarayıcı tarafından görüntü olarak işlenmiş yerine metin olarak görüntülenen bu HTML olarak kayıt etmek istiyorum.
C bunu nasıl buldum# ama Python değil. Biri bana yardım edebilir mi?
Teşekkürler.
Edit: Biri benim dizeleri gibi. saklanır neden sordu "Tarama" bir web sayfası ve belirli içerik alır. web-kazıma aracı kullanıyorum çünkü. Aracı (BeautifulSoup) biçiminde dize döndürür.
İlgili
CEVAP
Django kullanma durumu göz önüne alındığında, bu iki yanıtı var. Burada referans için: django.utils.html.escape
fonksiyonu
def escape(html):
"""Returns the given HTML with ampersands, quotes and carets encoded."""
return mark_safe(force_unicode(html).replace('&', '&').replace('<', '&l
t;').replace('>', '>').replace('"', '"').replace("'", '''))
Bu tersine çevirmek için, Çita işlevi Jake'in yanıt olarak tanımlanan çalışması gerekir, ama tek tırnak eksik. Bu sürüm güncelleştirilmiş bir demet, yedek sırasını simetrik sorunları önlemek için ters içerir:
def html_decode(s):
"""
Returns the ASCII decoded version of the given HTML string. This does
NOT remove normal HTML tags like <p>.
"""
for code in htmlCodes = (
("'", '''),
('"', '"'),
('>', '>'),
('<', '<'),
('&', '&')
):
s = s.replace(code[1], code[0])
return s
unescaped = html_decode(my_string)
Bu, ancak, genel bir çözüm değildir; sadece dizeleri django.utils.html.escape
ile kodlanmış için uygundur. Daha genel olarak, standart kütüphane ile sopa için iyi bir fikirdir:
# Python 2.x:
import HTMLParser
html_parser = HTMLParser.HTMLParser()
unescaped = html_parser.unescape(my_string)
# Python 3.x:
import html.parser
html_parser = html.parser.HTMLParser()
unescaped = html_parser.unescape(my_string)
Bir öneri olarak: HTML veritabanınızda çıkmamış depolamak için daha mantıklı olabilir. Mümkünse BeautifulSoup geri çıkmamış sonuçlar elde, ve bu süreç kaçınarak bakarak değer tamamen olurdu.
Django ile, tek kaçış şablon oluşturma sırasında oluşur; kaçmasını önlemek için sadece şablon motoru dize kaçmak için değil söyle. Bunu yapmak için, bir şablon olarak aşağıdaki seçeneklerden birini kullanın:
{{ context_var|safe }}
{% autoescape off %}
{{ context_var }}
{% endautoescape %}
Nasıl HTML kodu Sublime Text 2 kullana...
Nasıl rastgele bir liste Python kullan...
Nasıl sadece sayısal (0-9) HTML ınputb...
Nasıl HTTP üzerinden bir dosya Python ...
Nasıl jQuery kullanarak HTML varlıklar...