it-swarm.it

Come posso analizzare una pagina HTML con Node.js

Devo analizzare (lato server) grandi quantità di pagine HTML.
Siamo tutti d'accordo sul fatto che regexp non è la strada da percorrere qui.
Mi sembra che javascript sia il modo nativo di analizzare una pagina HTML, ma tale presupposto si basa sul codice lato server che ha tutte le capacità DOM di javascript all'interno di un browser.

Node.js ha quell'abilità integrata?
Esiste un approccio migliore a questo problema, analizzando HTML sul lato server?

87

Puoi usare i moduli npmjsdom e htmlparser per creare e analizzare un DOM in Node.JS.

Altre opzioni includono:

  • BeautifulSoup per Python
  • puoi convertirti html in xhtml e usare XSLT
  • HTMLAgilityPack per .NET
  • CsQuery per .NET (il mio nuovo preferito)
  • I motori JS spidermonkey e rhino hanno il supporto E4X nativo. Questo può essere utile, solo se converti il ​​tuo html in xhtml.

Tra tutte queste opzioni, preferisco usare l'opzione Node.js, perché utilizza i metodi di accesso DOM W3C standard e posso riutilizzare il codice sia sul client che sul server. Vorrei che i metodi di BeautifulSoup fossero più simili al W3C dom e penso che convertire il tuo HTML in XHTML per scrivere XSLT sia semplicemente sadico.

79
kzh

Usa Cheerio . Non è rigoroso come jsdom ed è ottimizzato per la raschiatura. Come bonus, usa i selettori jQuery che già conosci.

❤ Sintassi familiare: Cheerio implementa un sottoinsieme di core jQuery. Cheerio rimuove tutte le incoerenze del DOM e l'innesto del browser dalla libreria jQuery, rivelando la sua API davvero meravigliosa.

ϟ Straordinariamente veloce: Cheerio lavora con un modello DOM molto semplice e coerente. Di conseguenza l'analisi, la manipolazione e il rendering sono incredibilmente efficienti. I benchmark preliminari end-to-end suggeriscono che cheerio è circa 8 volte più veloce di JSDOM.

❁ Insanely flessibile: Cheerio avvolge il perdonante htmlparser di @ FB55. Cheerio può analizzare quasi tutti i documenti HTML o XML.

60
Meekohi

Usa htmlparser2 , in modo molto più veloce e semplice. Consulta questo esempio di utilizzo:

https://www.npmjs.org/package/htmlparser2#usage

E la demo live qui:

http://demos.forbeslindesay.co.uk/htmlparser2/

7
Anderson Madeira

Htmlparser2 di FB55 sembra essere una buona alternativa.

5
esp

jsdom è troppo severo per fare qualsiasi tipo di cose che raschiano lo schermo, ma beautifulsoup non soffoca con un cattivo markup.

node-soupselect è una porta di beautifulsoup di Python in nodejs, e funziona magnificamente

1
Yarek T