Pengurai HTML di Node.js [ditutup]

198

Apakah ada sesuatu seperti nokogiri Ruby di nodejs? Maksud saya pengurai HTML yang mudah digunakan.

Saya telah melihat di halaman modul Node.js beberapa parser, tetapi saya tidak dapat menemukan sesuatu yang cantik dan segar.

asci
sumber
3
Apa yang Anda maksud dengan "ramah"? Nyaman untuk bekerja dan memilih node dengan, seperti dukungan XPath dan CSS Nokogiri? Dapat menerima parsing HTML "tag soup" yang tidak valid?
Phrogz
Jika Anda merasa nyaman dengan jQuery, pertimbangkan jawaban ini .
Lucio Paiva

Jawaban:

446

Jika Anda ingin membangun DOM, Anda dapat menggunakan jsdom .

Ada juga cheerio , ia memiliki antarmuka jQuery dan jauh lebih cepat daripada versi jsdom yang lebih lama, meskipun saat ini mereka memiliki kinerja yang serupa.

Anda mungkin ingin melihat htmlparser2 , yang merupakan pengurai streaming, dan menurut patokannya, tampaknya lebih cepat daripada yang lain, dan tidak ada DOM secara default. Itu juga dapat menghasilkan DOM, karena juga dibundel dengan pawang yang menciptakan DOM. Ini adalah parser yang digunakan oleh cheerio.

parse5 juga terlihat seperti solusi yang bagus. Ini cukup aktif (11 hari sejak komit terakhir pada pembaruan ini), WHATWG-compliant, dan digunakan dalam jsdom , Angular , dan Polymer .

Dan jika Anda ingin menguraikan HTML untuk pengikisan web , Anda dapat menggunakan YQL 1 . Ada modul simpul untuk itu. YQL Saya pikir akan menjadi solusi terbaik jika HTML Anda berasal dari situs web statis , karena Anda mengandalkan layanan, bukan kode Anda sendiri dan kekuatan pemrosesan. Meskipun perhatikan bahwa itu tidak akan berfungsi jika halaman tidak diizinkan oleh robot.txt dari situs web, YQL tidak akan bekerja dengannya.

Jika situs web yang Anda coba gesek adalah dinamis maka Anda harus menggunakan browser tanpa kepala seperti phantomjs . Lihat juga casperjs , jika Anda mempertimbangkan phantomjs. Dan Anda dapat mengontrol casperjs dari node dengan SpookyJS .

Di samping phantomjs ada zombiejs . Tidak seperti phantomjs yang tidak dapat tertanam dalam nodejs, zombiejs hanyalah modul simpul.

Ada nettuts + toturial untuk solusi terakhir.


1 Sejak Agustus 2014, perpustakaan YUI, yang merupakan persyaratan untuk YQL, tidak lagi dipelihara secara aktif, sumber

Farid Nouri Neshat
sumber
1
Anda bisa mendapatkan DOM dari htmlparser2 menggunakan modul DomHandler (dibundel dengan htmlparser2). Mereka dipisahkan dengan sengaja untuk memungkinkan jenis pemrosesan HTML lainnya tanpa biaya overhead untuk membuat DOM.
esp
@ Es Terima kasih, Sebelum saya pikir itu adalah DOM non-standar, saya mengubah bagian itu sesuai.
Farid Nouri Neshat
Saya tidak yakin bagaimana Anda merayapi YQL - ini lebih untuk bergabung dengan hasil layanan web yang tidak memproses markup.
dardenfall
@dardenfall Anda benar, merangkak bukan istilah yang tepat. Saya mengubahnya dengan mengikis :)
Farid Nouri Neshat
@Farid - (akan mengirim pesan jika saya bisa) dengan risiko berdebat dalam komentar (maaf!) ​​Saya masih tidak melihat bagaimana Anda menggunakannya untuk memo. Ini berfungsi dengan layanan web bukan situs, dan dengan layanan, Anda jarang mengurai html. Mungkin xml, tetapi tidak html.
dardenfall