Quale parser HTML è il migliore? [chiuso]


194

Codifico molti parser. Fino ad ora, stavo usando il browser senza testa HtmlUnit per l'analisi e l'automazione del browser.

Ora, voglio separare entrambi i compiti.

Poiché l'80% del mio lavoro prevede solo l'analisi, voglio usare un parser HTML leggero perché ci vuole molto tempo in HtmlUnit per caricare prima una pagina, quindi ottenere il sorgente e quindi analizzarlo.

Voglio sapere quale parser HTML è il migliore. Il parser sarebbe migliore se è vicino al parser HtmlUnit.


MODIFICARE:

Per meglio, voglio almeno le seguenti funzionalità:

  1. Velocità
  2. Facilità di individuare qualsiasi HtmlElement dal suo "id" o "nome" o "tipo di tag".

Andrebbe bene per me se non pulisse il codice HTML sporco. Non ho bisogno di pulire alcuna fonte HTML. Ho solo bisogno di un modo più semplice per spostarmi tra HtmlElements e raccogliere dati da loro.


2
Come intendi "migliore"? Intendi velocità, facilità di passaggio dall'attuale implementazione, aderenza agli standard W3C, qualcos'altro a cui non ho pensato? La tua domanda implica velocità, ma implica anche tempi di transizione per lo sviluppo. Alcuni chiarimenti possono aiutare gli altri a raccomandare buoni parser che si adattano meglio alle tue esigenze.
aperkins

2
La tua affermazione "codifico molti parser" non sembra rispondere alla domanda. Intendi "Devo usare molto i parser HTML?"
vuoto

11
Penso che questa domanda sia abbastanza specifica da essere esente dalla stretta ragione "non costruttiva".
Bill the Lizard,

9
Vota per riaprirlo, per favore. Questo è abbastanza specifico e non dovrebbe essere chiuso.
AZ_

3
Sì, alcune persone su SO combattono una guerra santa contro le guerre sante delle "migliori" domande. Così fastidioso. Il voto di risposta indica chiaramente l'utilità di questa domanda.
user1050755

Risposte:


396

Auto-plug: ho appena rilasciato un nuovo parser HTML Java: jsoup . Lo cito qui perché penso che farà ciò che stai cercando.

Il suo trucco per le feste è una sintassi del selettore CSS per trovare elementi, ad esempio:

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();

Vedi il selettore javadoc per maggiori informazioni.

Questo è un nuovo progetto, quindi qualsiasi idea di miglioramento è molto gradita!


15
Questa cosa è fantastica e adoro il supporto per i selettori CSS. So a malapena che sto usando una libreria Java. :-)
William Pietri,

17
Per favore, non smettere di supportare questo. Questo è esattamente ciò di cui abbiamo bisogno per analizzare HTML utilizzando Java lato server! Questo e spettacolare! Ho creato un proxy in appena un paio d'ore che modifica tutti i collegamenti src e href per renderli percorsi completi al server di origine.
jmort253,

7
L'ho appena dato un'occhiata. Mi piace la sua interfaccia e documentazione. È facile da capire :)
emeraldhieu,

5
Bel lavoro! È stato installato e funzionato in meno di 10 minuti.
Indrek Kõue,

10
Incredibile, questo è così malato. Sono stato in grado di elaborare una pagina HTML in pochi minuti. GRAZIE TANTO PER QUESTA GRANDE OPERA.
Michael-O,

32

Il migliore che ho visto finora è HtmlCleaner :

HtmlCleaner è un parser HTML open source scritto in Java. L'HTML trovato sul Web è generalmente sporco, mal formato e inadatto per ulteriori elaborazioni. Per qualsiasi serio consumo di tali documenti, è necessario prima ripulire il disordine e portare l'ordine a tag, attributi e testo ordinario. Per il dato documento HTML, HtmlCleaner riordina i singoli elementi e produce XML ben formato. Per impostazione predefinita, segue regole simili utilizzate dalla maggior parte dei browser Web per creare il modello a oggetti del documento. Tuttavia, l'utente può fornire tag personalizzati e set di regole per il filtraggio e il bilanciamento dei tag.

Con HtmlCleaner puoi individuare qualsiasi elemento usando XPath.

Per altri parser html vedi questa domanda SO .


1
Devi gestire tu stesso il proxy, quindi utilizzare HtmlCleaner per elaborare il tuo stream. => Non è conveniente. T__T
kidnan1991

HTMLTidy non sarebbe un'opzione migliore qui? html-tidy.org
Troy Witthoeft

1
Similar rules that the most of web browsers use- Questo non è molto convincente
pguardiario

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.