Czy ktoś wie w Pythonie prosty sposób przekształcania ciągu znaków z kodami jednostek HTML (na przykład <
&
) w zwykły ciąg znaków (np. < &)?Kody jednostek HTML do tekstu
cgi.escape()
będzie uciec struny (słabo), ale nie ma unescape()
.
Czy ktoś wie w Pythonie prosty sposób przekształcania ciągu znaków z kodami jednostek HTML (na przykład <
&
) w zwykły ciąg znaków (np. < &)?Kody jednostek HTML do tekstu
cgi.escape()
będzie uciec struny (słabo), ale nie ma unescape()
.
ma funkcjonalność w bibliotece standardowej. To jest, niestety, nieudokumentowane:
(python2 Docs)
>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha < β')
u'alpha < \u03b2'
(Python 3 Docs)
>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha < β')
'alpha < \u03b2'
htmlentitydefs jest udokumentowane, ale wymaga, aby zrobić wiele prac samodzielnie.
Jeśli potrzebujesz tylko predefiniowanych jednostek XML (lt, gt, amp, quot, apos), możesz użyć minidom do ich analizy. Jeśli potrzebujesz tylko predefiniowanych elementów i żadnych odnośników liczbowych, możesz nawet użyć zwykłego starego ciągu zastępującego prędkość.
Nie ma nic wbudowanego w Python stdlib do unescape HTML, ale istnieje krótki skrypt, który można dostosować do swoich potrzeb pod adresem http://www.w3.org/QA/2008/04/unescape-html-entities-python .html.
Użyj modułu htmlentitydefs. To mój stary kod, to działa, ale jestem pewien, że jest czystsze i bardziej pythonic sposób to zrobić:
e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())
zapomniałem oznaczyć go na początku, ale używam BeautifulSoup.
Kopanie wokół w dokumentacji znalazłem:
soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
robi to dokładnie tak, jak miałem nadzieję.
Działa to tylko w przypadku wersji BeautifulSoup wersji wcześniejszej niż BS4. Jeśli używasz BS4, musisz użyć formatyzatora: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#output-formatters – kronion
to nie działa dla & Właściwie, jeśli ciąg zawiera "&" , BeautifulSoup zamienia go z powrotem na &, co jest przeciwieństwem tego, co miałem nadzieję. –
+1 Nie wiedziałem, że funkcja HTMLParser – vartec
Oto udokumentowana funkcja ze standardowej biblioteki, która zamieni kod z hasłem HTML na normalny ciąg: http://docs.python.org/library/xml.sax. utils.html # xml.sax.saxutils.unescape –
W Pythonie 3.4 jest [udokumentowane] (https://docs.python.org/3/library/html.html#html.unescape). – 9000