HTML-parser su Node.js [chiuso]


198

C'è qualcosa come il nokogiri di Ruby su nodejs? Intendo un parser HTML intuitivo.

Sulla pagina dei moduli di Node.js avevo visto alcuni parser, ma non trovo qualcosa di carino e di fresco.


3
Cosa intendi con "amichevole"? Conveniente lavorare e selezionare nodi con, come il supporto selettore XPath e CSS di Nokogiri? Sei in grado di analizzare HTML "tag soup" non valido?
Phrogz,

Se hai dimestichezza con jQuery, considera questa risposta .
Lucio Paiva,

Risposte:


446

Se vuoi creare DOM puoi usare jsdom .

C'è anche cheerio , ha l' interfaccia jQuery ed è molto più veloce delle versioni precedenti di jsdom, anche se al giorno d'oggi sono simili nelle prestazioni.

Potresti voler dare un'occhiata a htmlparser2 , che è un parser di streaming e, secondo il suo benchmark, sembra essere più veloce di altri e nessun DOM di default. Può anche produrre un DOM, poiché è anche in bundle con un gestore che crea un DOM. Questo è il parser utilizzato da Cheerio.

parse5 sembra anche una buona soluzione. È abbastanza attivo (11 giorni dall'ultimo commit a partire da questo aggiornamento), conforme a WHATWG, ed è utilizzato in jsdom , Angular e Polymer .

E se vuoi analizzare HTML per lo scraping web , puoi usare YQL 1 . C'è un modulo nodo per questo. YQL Penso che sarebbe la soluzione migliore se il tuo HTML proviene da un sito Web statico , poiché fai affidamento su un servizio, non sul tuo codice e sulla tua potenza di elaborazione. Sebbene si noti che non funzionerà se la pagina non è consentita da robot.txt del sito Web, YQL non funzionerà con essa.

Se il sito web che stai cercando di raschiare è dinamico , dovresti utilizzare un browser senza testa come phantomjs . Dai un'occhiata anche a casperjs , se stai considerando phantomjs. E puoi controllare casperjs dal nodo con SpookyJS .

Accanto a Phantomjs c'è zombiejs . A differenza dei phantomjs che non possono essere incorporati in nodejs, zombiejs è solo un modulo nodo.

C'è un nettuts + toturial per le ultime soluzioni.


1 Da agosto 2014, la libreria YUI, che è un requisito per YQL, non viene più mantenuta attivamente, fonte


1
Puoi ottenere DOM da htmlparser2 utilizzando il modulo DomHandler (in bundle con htmlparser2). Sono separati appositamente per consentire altri tipi di elaborazione HTML senza sovraccarico di creazione di DOM.
esp

@esp Grazie, prima di pensare che fosse un DOM non standard, ho modificato quella sezione di conseguenza.
Farid Nouri Neshat il

Non sono sicuro di come YQL per la ricerca per indicizzazione: è più per unire i risultati dei servizi Web che non per l'elaborazione del markup.
Caduta del

@dardenfall Hai ragione, strisciare non è il termine giusto. L'ho cambiato con raschiando :)
Farid Nouri Neshat il

@Farid - (ti avrei appena inviato un messaggio se potessi) a rischio di discutere nei commenti (mi dispiace!) Non vedo ancora come lo usi per raschiare. Funziona con i servizi web , non con i siti, e con wservices, raramente stai analizzando HTML. Forse xml, ma non html.
Dardenfall,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.