Saya mencari modul HTML Parser untuk Python yang dapat membantu saya mendapatkan tag dalam bentuk daftar Python / kamus / objek.
Jika saya memiliki dokumen formulir:
<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
maka itu harus memberi saya cara untuk mengakses tag bersarang melalui nama atau id dari tag HTML sehingga saya pada dasarnya dapat meminta saya untuk mendapatkan saya konten / teks dalam div
tag dengan yang class='container'
terkandung dalam body
tag, atau sesuatu yang serupa.
Jika Anda telah menggunakan fitur "Inspect element" Firefox (lihat HTML), Anda akan tahu bahwa itu memberi Anda semua tag dengan cara bersarang yang bagus seperti pohon.
Saya lebih suka modul built-in tapi itu mungkin meminta sedikit terlalu banyak.
Saya telah melalui banyak pertanyaan tentang Stack Overflow dan beberapa blog di internet dan kebanyakan dari mereka menyarankan BeautifulSoup atau lxml atau HTMLParser tetapi sedikit dari rincian ini fungsionalitas dan hanya berakhir sebagai sebuah debat mengenai mana yang lebih cepat / lebih efisien.
sumber
Jawaban:
Anda tidak perlu deskripsi kinerja, saya kira - baca saja cara kerja BeautifulSoup. Lihatlah dokumentasi resminya .
sumber
from bs4 import BeautifulSoup
lxml
perpustakaan sebagai gantinya (lihat jawaban di bawah). Dengancssselect
itu juga cukup berguna dan kinerja seringkali 10 hingga 100 kali lipat lebih baik daripada perpustakaan lain yang tersedia.class
atribut spesial:BeautifulSoup(html).find('div', 'container').text
Saya kira yang Anda cari adalah pyquery :
Contoh dari apa yang Anda inginkan mungkin seperti:
Dan ia menggunakan penyeleksi yang sama dengan elemen inspeksi Firefox atau Chrome. Sebagai contoh:
Pemilih elemen yang diperiksa adalah 'div # mw-head.noprint'. Jadi dalam pyquery, Anda hanya perlu melewati pemilih ini:
sumber
Di sini Anda dapat membaca lebih lanjut tentang parser HTML berbeda di Python dan kinerjanya. Meskipun artikelnya sedikit bertanggal, artikel ini tetap memberi Anda gambaran yang bagus.
Kinerja pengurai Python HTML
Saya akan merekomendasikan BeautifulSoup meskipun tidak built-in. Hanya karena begitu mudah untuk bekerja dengan jenis tugas itu. Misalnya:
sumber
from bs4 import BeautifulSoup
Dibandingkan dengan parser libraries lainnya
lxml
sangat cepat:Dan dengan
cssselect
itu cukup mudah digunakan untuk memo halaman HTML juga:lxml.html Dokumentasi
sumber
import requests
, simpan buffer ke file: stackoverflow.com/a/14114741/1518921 (atau urllib), setelah memuat file yang disimpan menggunakan parse,doc = parse('localfile.html').getroot()
1.7
, tetapi menerapkan lxml sebagai gantinya, meningkatkannya hampir*100
kali LEBIH CEPAT! Jika peduli dengan kinerja, lxml adalah pilihan terbaikSaya merekomendasikan lxml untuk parsing HTML. Lihat "Parsing HTML" (di situs lxml).
Dalam pengalaman saya, Beautiful Soup mengacaukan beberapa HTML yang rumit. Saya percaya itu karena Beautiful Soup bukan parser, melainkan penganalisa string yang sangat baik.
sumber
Saya sarankan menggunakan perpustakaan justext :
https://github.com/miso-belica/jusText
Penggunaan: Python2:
Python3:
sumber
Saya akan menggunakan EHP
https://github.com/iogf/ehp
Ini dia:
Keluaran:
sumber