Analizuję trochę HTML z Beautiful Soup 3, ale zawiera encje HTML, które Beautiful Soup 3 nie dekodują automatycznie dla mnie:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
Jak mogę dekodować encje HTML, text
aby uzyskać "£682m"
zamiast "£682m"
.
Odpowiedzi:
Python 3.4+
Użyj
html.unescape()
:FYI
html.parser.HTMLParser.unescape
jest przestarzałe i miało zostać usunięte w 3.5 , chociaż zostało pozostawione przez pomyłkę. Wkrótce zostanie usunięty z języka.Python 2.6-3.3
Możesz użyć
HTMLParser.unescape()
ze standardowej biblioteki:HTMLParser
html.parser
Możesz także użyć
six
biblioteki kompatybilności, aby uprościć import:źródło
unescape
metody całyHTMLParser
moduł był przestarzały na korzyśćhtml.parser
.h.unescape(s).encode("utf-8")
. Dokumenty: „” „Podana tutaj definicja zawiera wszystkie byty zdefiniowane przez XHTML 1.0, które można obsługiwać za pomocą prostego zastępowania tekstu w zestawie znaków Latin-1 (ISO-8859-1)„ ””Piękna Zupa obsługuje konwersję bytu. W Beautiful Soup 3 musisz podać
convertEntities
argumentBeautifulSoup
konstruktora (zobacz sekcję „Konwersja encji” zarchiwizowanych dokumentów). W Beautiful Soup 4 jednostki są dekodowane automatycznie.Piękna zupa 3
Piękna zupa 4
źródło
BeautifulSoup4
używaHTMLParser
głównie. Zobacz źródłoMożesz użyć replace_entities z biblioteki w3lib.html
źródło
Beautiful Soup 4 pozwala ustawić formatyzator na wyjściu
źródło
Miałem podobny problem z kodowaniem. Użyłem metody normalize (). Podczas eksportowania ramki danych do pliku .html w innym katalogu otrzymywałem błąd Unicode przy użyciu metody pandas .to_html (). Skończyło się na tym i to zadziałało ...
Obiektem ramki danych może być dowolny obiekt, nazwijmy go tabelą ...
koduj dane tabeli, abyśmy mogli je wyeksportować do pliku .html w folderze szablonów (może to być dowolna lokalizacja :))
eksport znormalizowanego ciągu do pliku HTML
Odniesienie: dokumentacja Unicodedata
źródło
Prawdopodobnie nie ma to tutaj znaczenia. Ale aby wyeliminować te wpisy HTML z całego dokumentu, możesz zrobić coś takiego: (Załóżmy, że dokument = strona i proszę wybaczyć niechlujny kod, ale jeśli masz pomysły, jak to poprawić, jestem cały uszu - jestem nowy w to).
źródło
.unescape()
robi to dla ciebie . Nie rozumiem, dlaczego ty i Rob opublikowaliście te skomplikowane rozwiązania, które rzucają własnymi dopasowaniami do encji, gdy zaakceptowana odpowiedź już jasno pokazuje, że.unescape()
można znaleźć encje w ciągu.