Parser HTML mana yang terbaik? [Tutup]

194

Saya kode banyak parser. Sampai sekarang, saya menggunakan browser tanpa kepala HtmlUnit untuk penguraian dan otomatisasi browser.

Sekarang, saya ingin memisahkan kedua tugas.

Karena 80% dari pekerjaan saya hanya melibatkan parsing, saya ingin menggunakan parser HTML ringan karena membutuhkan banyak waktu di HtmlUnit untuk memuat halaman pertama, kemudian mendapatkan sumber dan kemudian menguraikannya.

Saya ingin tahu parser HTML mana yang terbaik. Parser akan lebih baik jika dekat dengan Parser HtmlUnit.


EDIT:

Yang terbaik, saya ingin setidaknya fitur-fitur berikut:

  1. Mempercepat
  2. Mudah untuk menemukan HtmlElement apa pun dengan "id" atau "nama" atau "tipe tag".

Tidak masalah bagi saya jika tidak membersihkan kode HTML yang kotor. Saya tidak perlu membersihkan sumber HTML apa pun. Saya hanya perlu cara termudah untuk berpindah melintasi HtmlElements dan mengumpulkan data dari mereka.

Yatendra Goel
sumber
2
Bagaimana maksud Anda "terbaik"? Maksud Anda kecepatan, kemudahan transisi dari implementasi saat ini, kepatuhan terhadap standar W3C, hal lain yang belum saya pikirkan? Pertanyaan Anda menyiratkan kecepatan, tetapi juga menyiratkan waktu transisi pengembangan. Beberapa klarifikasi dapat membantu orang lain dalam merekomendasikan parser yang baik yang akan lebih sesuai dengan kebutuhan Anda.
April
2
Pernyataan Anda 'Saya kode banyak parser' sepertinya tidak cocok dengan pertanyaan. Apakah maksud Anda 'Saya harus sering menggunakan parser html?'
kosong
11
Saya pikir pertanyaan ini cukup spesifik untuk dikecualikan dari alasan dekat "tidak konstruktif".
Bill the Lizard
9
Pilih untuk membuka kembali ini. Ini cukup spesifik dan tidak boleh ditutup.
AZ_
3
Ya, beberapa orang di SO berperang suci melawan perang suci pertanyaan "terbaik". Sangat mengganggu. Jawaban memilih dengan jelas menunjukkan kegunaan pertanyaan ini.
user1050755

Jawaban:

396

Steker mandiri: Saya baru saja merilis parser HTML Java baru: jsoup . Saya menyebutkannya di sini karena saya pikir itu akan melakukan apa yang Anda cari.

Trik pestanya adalah sintaks pemilih CSS untuk menemukan elemen, misalnya:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

Lihat javadoc Selector untuk info lebih lanjut.

Ini adalah proyek baru, jadi ide untuk perbaikan sangat disambut!

Jonathan Hedley
sumber
15
Hal ini fantastis, dan saya suka dukungan pemilih CSS. Saya hampir tidak tahu saya menggunakan perpustakaan Java. :-)
William Pietri
17
Tolong jangan berhenti mendukung ini. Ini adalah persis apa yang kami butuhkan untuk mem-parsing HTML menggunakan Java sisi-server! Ini luar biasa! Saya membangun proxy hanya dalam beberapa jam yang memodifikasi semua tautan src dan href untuk menjadikannya jalur penuh ke server asal.
jmort253
7
Saya baru saja meliriknya. Saya suka antarmuka dan dokumentasinya. Mudah dimengerti. :)
emeraldhieu
5
Pekerjaan yang baik! Dapatkan jsoup dan berjalan dalam waktu kurang dari 10 menit.
Indrek Kõue
10
Tidak bisa dipercaya, ini sakit sekali. Saya dapat memproses halaman HTML dalam beberapa menit. Terima kasih banyak untuk pekerjaan besar ini.
Michael-O
32

Yang terbaik yang saya lihat sejauh ini adalah HtmlCleaner :

HtmlCleaner adalah parser HTML open-source yang ditulis dalam Java. HTML yang ditemukan di Web biasanya kotor, tidak berbentuk dan tidak cocok untuk diproses lebih lanjut. Untuk setiap konsumsi serius dari dokumen-dokumen seperti itu, perlu untuk terlebih dahulu membersihkan kekacauan dan membawa pesanan ke tag, atribut dan teks biasa. Untuk dokumen HTML yang diberikan, HtmlCleaner menata ulang elemen individu dan menghasilkan XML yang terbentuk dengan baik. Secara default, ini mengikuti aturan serupa yang digunakan sebagian besar browser web untuk membuat Model Objek Dokumen. Namun, pengguna dapat memberikan tag khusus dan aturan yang ditetapkan untuk penyaringan dan penyetelan tag.

Dengan HtmlCleaner Anda dapat menemukan elemen apa pun menggunakan XPath.

Untuk parser html lainnya lihat pertanyaan SO ini .

tangens
sumber
1
Anda harus menangani sendiri proksi tersebut, lalu menggunakan HtmlCleaner untuk memproses streaming Anda. => Tidak nyaman. T__T
kidnan1991
Bukankah HTMLTidy akan menjadi pilihan yang lebih baik di sini? html-tidy.org
Troy Witthoeft
1
Similar rules that the most of web browsers use- Ini tidak terlalu meyakinkan
pguardiario