2010-01-30 18 views
160

Codice molti parser. Fino ad ora, stavo usando il browser headless HtmlUnit per l'analisi e l'automazione del browser.Quale parser HTML è il migliore?

Ora, voglio separare entrambi i compiti.

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

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


EDIT:

Di meglio, voglio almeno le seguenti caratteristiche:

  1. velocità
  2. facilità per individuare qualsiasi HtmlElement dal suo "id" o "nome" o "tipo di tag".

Sarebbe ok per me se non pulisce il codice HTML sporco. Non ho bisogno di pulire qualsiasi sorgente HTML. Ho solo bisogno di un modo più semplice per spostarmi tra HtmlElements e raccogliere dati da loro.

+2

Come intendete "migliore"? Intendi velocità, facilità di transizione dall'attuale implementazione, aderenza agli standard W3C, qualcos'altro che non ho pensato? La tua domanda implica velocità, ma implica anche il tempo di transizione dello sviluppo.Alcuni chiarimenti possono aiutare gli altri a raccomandare dei buoni parser che si adattino meglio alle tue esigenze. – aperkins

+2

La tua frase 'I code a molti parser' non sembra corrispondere alla domanda. Vuoi dire 'ho bisogno di usare parser html molto?' – blank

+8

Penso che questa domanda sia abbastanza specifica da essere esentata dal motivo di chiusura "non costruttivo". –

risposta

339

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

Il suo trucco partito è una sintassi selettore CSS per trovare gli elementi, ad es .:

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 l'Selector javadoc per maggiori informazioni.

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

+12

Questa cosa è fantastica, e adoro il supporto del selettore CSS. So a malapena che sto usando una libreria Java. :-) –

+14

Si prega di non smettere di sostenere questo. Questo è esattamente ciò di cui abbiamo bisogno per analizzare l'HTML usando Java sul 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 verso il server di origine. – jmort253

+6

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

28

Il migliore che ho visto finora è HtmlCleaner:

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

Con HtmlCleaner è possibile individuare qualsiasi elemento utilizzando XPath.

Per altri parser html vedere this SO question.

+0

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

+0

HTMLTidy non sarebbe un'opzione migliore qui? http://www.html-tidy.org/ –

+0

'Regole simili utilizzate dalla maggior parte dei browser Web. - Questo non è molto convincente – pguardiario

Problemi correlati