Saya mem-parsing beberapa HTML dengan Beautiful Soup 3, tetapi itu berisi entitas HTML yang Beautiful Soup 3 tidak dapat memecahkan kode untuk saya:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<p>£682m</p>")
>>> text = soup.find("p").string
>>> print text
£682m
Bagaimana saya bisa mendekode entitas HTML text
untuk mendapatkan "£682m"
alih-alih "£682m"
.
Jawaban:
Python 3.4+
Gunakan
html.unescape()
:FYI
html.parser.HTMLParser.unescape
sudah usang, dan seharusnya dihapus dalam 3,5 , meskipun itu ditinggalkan karena kesalahan. Itu akan segera dihapus dari bahasa.Python 2.6-3.3
Anda dapat menggunakan
HTMLParser.unescape()
dari perpustakaan standar:HTMLParser
html.parser
Anda juga dapat menggunakan
six
perpustakaan kompatibilitas untuk menyederhanakan impor:sumber
unescape
metode, seluruhHTMLParser
modul tidak digunakan lagihtml.parser
.h.unescape(s).encode("utf-8")
. Dokumen: "" "Definisi yang diberikan di sini berisi semua entitas yang didefinisikan oleh XHTML 1.0 yang dapat ditangani menggunakan substitusi teks sederhana dalam set karakter Latin-1 (ISO-8859-1)" ""Beautiful Soup menangani konversi entitas. Di Beautiful Soup 3, Anda harus menentukan
convertEntities
argumen untukBeautifulSoup
konstruktor (lihat bagian 'Konversi Entitas' dari dokumen yang diarsipkan). Di Beautiful Soup 4, entitas diterjemahkan secara otomatis.Sup Cantik 3
Sup Cantik 4
sumber
BeautifulSoup4
menggunakanHTMLParser
, sebagian besar. Lihat sumberAnda dapat menggunakan replace_entities dari pustaka w3lib.html
sumber
Beautiful Soup 4 memungkinkan Anda untuk mengatur formatter ke output Anda
sumber
Saya memiliki masalah penyandian yang serupa. Saya menggunakan metode normalize (). Saya mendapatkan kesalahan Unicode menggunakan metode panda .to_html () saat mengekspor bingkai data saya ke file .html di direktori lain. Saya akhirnya melakukan ini dan berhasil ...
Objek dataframe dapat berupa apa pun yang Anda suka, sebut saja tabel ...
menyandikan data tabel sehingga kami dapat mengekspornya ke file .html di folder templat (ini bisa berupa lokasi apa pun yang Anda inginkan :))
ekspor string yang dinormalisasi ke file html
Referensi: dokumentasi unicodedata
sumber
Ini mungkin tidak relevan di sini. Tetapi untuk menghilangkan html ini dari seluruh dokumen, Anda dapat melakukan sesuatu seperti ini: (Asumsikan dokumen = halaman dan tolong maafkan kode yang ceroboh, tetapi jika Anda memiliki ide bagaimana membuatnya lebih baik, saya ingin tahu - saya baru saja ini).
sumber
.unescape()
melakukan itu untukmu . Saya tidak mengerti mengapa Anda dan Rob memposting solusi rumit yang menggulung pencocokan entitas mereka sendiri ketika jawaban yang diterima sudah menunjukkan dengan jelas yang.unescape()
dapat menemukan entitas dalam string.