2010-07-08 18 views
56

Non riesco a trovare alcun buon web scraping API basata su Java. Il sito che ho bisogno di raschiare non fornisce alcuna API; Voglio scorrere tutte le pagine web usando qualche pageID ed estrarre i titoli HTML/altre cose nei loro alberi DOM.Web scraping con Java

Ci sono modi diversi dal web scraping?

Grazie

risposta

75

Estrazione del titolo non è difficile, e si dispone di molte opzioni, cercare su Stack Overflow per "parser HTML Java". Uno di questi è Jsoup.

Si può navigare la pagina utilizzando DOM se si conosce la struttura della pagina, vedere http://jsoup.org/cookbook/extracting-data/dom-navigation

E 'una buona biblioteca e ho usato nei miei ultimi progetti.

+2

Grazie, è una bella libreria senza dipendenze quindi è abbastanza leggero. Inoltre, è senza testa quindi non ha bisogno di un browser (ho avuto problemi con ** Selenium ** che apre Chrome e non ho potuto usare ** HtmlUnit **). ** Il selenio ** deve essere più realistico ma questa libreria potrebbe servire allo scopo nella maggior parte dei casi di scraping ed è davvero facile da configurare: aggiungi la dipendenza e sei a posto. –

+0

Ottima libreria davvero. Configurazione semplice e potente supporto regex. doc.select ("li [id =^cosid_]"). Freddo. – EMM

+0

Ho recentemente aperto il mio framework di scraping web che non solo consente di analizzare i documenti con Jsoup e HtmlUnit, ma gestisce anche la parallelizzazione per te e può gestire un ampio pool di server proxy, se necessario: https://github.com/subes/invesdwin-webproxy – subes

2

Guarda un parser HTML come TagSoup, HTMLCleaner o NekoHTML.

19

La cosa migliore è quella di utilizzare selenio Web driver dal momento che

  1. fornisce un feedback visivo al coder (consultare il raschiamento in azione, vedere dove si ferma)
  2. accurata e coerente in quanto controlla direttamente la browser che usi.
  3. Lento. Non colpisce le pagine web come HtmlUnit ma a volte non vuoi colpire troppo velocemente.

    Htmlunit è veloce ma è orribile a gestire Javascript e AJAX.

12

HtmlUnit può essere usato per fare web scraping, supporta invocando pagine, riempiendo & forme presentazione. Ho usato questo nel mio progetto. È una buona libreria java per il web scraping. read here for more

2

Si potrebbe provare ui4j o cdp4j libreria per web scraping. ui4j richiede Java 8 e utilizza il browser WebKit JavaFx e cdp4j richiede Chrome.

1

Utilizzando il raschietto Web, è possibile estrarre il contenuto utile dalla pagina Web e convertirlo in qualsiasi formato, se applicabile.

WebScrap ws= new WebScrap(); 
//set your extracted website url 
ws.setUrl("http://dasnicdev.github.io/webscrap4j/"); 
//start scrap session 
ws.startWebScrap(); 

Ora il vostro web-rottamazione inizio sessione e pronti per la demolizione o estrarre dati in Java utilizzando webscrap4j library.

Per il titolo:

System.out.println("-------------------Title-----------------------------"); 
System.out.println(ws.getSingleHTMLTagData("title")); 

Per Messaggio personale:

System.out.println("-------------------Tagline-----------------------------"); 
System.out.println(ws.getSingleHTMLScriptData("<h2 id='project_tagline'>", "</h2>")); 

For All tag di ancoraggio:

System.out.println("-------------------All anchor tag-----------------------------"); 
    al=ws.getImageTagData("a", "href"); 
    for(String adata: al) 
    { 
    System.out.println(adata); 
    } 

Per i dati Image:

System.out.println("-------------------Image data-----------------------------"); 
    System.out.println(ws.getImageTagData("img", "src")); 
    System.out.println(ws.getImageTagData("img", "alt")); 

Per Ul-Li dati:

System.out.println("-------------------Ul-Li Data-----------------------------"); 
    al=ws.getSingleHTMLScriptData("<ul>", "</ul>","<li>","</li>"); 
    for(String str:al) 
    { 
    System.out.println(str); 
    } 

Per un pieno controllo del codice sorgente di questo tutorial.

0

Se si desidera automatizzare la raschiatura di pagine grandi quantità o di dati, allora si potrebbe provare Gotz ETL.

È completamente guidato dal modello come un vero strumento ETL. La struttura dei dati, il flusso di lavoro delle attività e le pagine da raschiare sono definite con un set di file di definizione XML e non è richiesta alcuna codifica. La query può essere scritta utilizzando Selettori con JSoup o XPath con HtmlUnit.

+0

Chiesto 7 anni, 6 mesi fa. – Eritrean