2010-07-08 20 views
56

Ich bin nicht in der Lage, eine gute Web Scraping Java-basierte API zu finden. Die Seite, die ich scrappen muss, stellt auch keine API bereit; Ich möchte über alle Webseiten iterieren mit einigen pageID und extrahiere die HTML-Titel/andere Sachen in ihren DOM-Bäumen.Web Scraping mit Java

Gibt es andere Möglichkeiten als das Scraping von Webseiten?

Dank

Antwort

75

den Titel Extrahierung ist nicht schwer, und haben Sie viele Möglichkeiten, hier auf Stack-Überlauf für das Wort „Java HTML-Parser“. Einer von ihnen ist Jsoup.

Sie können die Seite mit DOM navigieren, wenn Sie die Seitenstruktur kennen, http://jsoup.org/cookbook/extracting-data/dom-navigation

Es ist eine gute Bibliothek sehen und ich habe es in meiner letzten Projekte verwendet.

+2

Danke, es ist eine nette Bibliothek ohne Abhängigkeiten, also ist es ziemlich leicht. Außerdem ist es kopflos, so dass es keinen Browser benötigt (ich hatte Probleme mit ** Selenium ** beim Öffnen von Chrome und ich konnte ** HtmlUnit ** überhaupt nicht verwenden). ** Selen ** muss realistischer sein, aber diese Bibliothek kann in den meisten Scraping-Fällen den Zweck erfüllen und es ist wirklich einfach einzurichten: füge die Abhängigkeit hinzu und du bist gut zu gehen. –

+0

Ausgezeichnete Bibliothek in der Tat. Einfache Einrichtung und leistungsstarke Regex-Unterstützung. doc.select ("li [id^= cosid_]"). Cool. – EMM

+0

Ich habe kürzlich mein Web-Scraping-Framework geöffnet, das nicht nur das Parsen der Dokumente mit Jsoup und HtmlUnit ermöglicht, sondern auch die Parallelisierung für Sie übernimmt und bei Bedarf einen großen Pool von Proxy-Servern verwalten kann: https://github.com/subes/invesdwin-webproxy – subes

2

Betrachten Sie einen HTML-Parser wie TagSoup, HTMLCleaner oder NekoHTML.

19

Ihre beste Wette ist Selen Web-Treiber zu verwenden, da es

  1. visuelles Feedback an den Kodierer Stellt (Ihr Schaben in Aktion sehen, sehen, wo er anhält)
  2. genaue und konsistente, da es direkt steuert die Browser, den Sie verwenden.
  3. Langsam. Es trifft nicht auf Webseiten wie HtmlUnit, aber manchmal möchte man nicht zu schnell schlagen.

    Htmlunit ist schnell, aber ist schrecklich bei der Handhabung von Javascript und AJAX.

12

Htmlunit verwendet werden können, Screen Scraping zu tun, es unterstützt Seiten aufrufen, Füllen & Einreichung Formen. Ich habe das in meinem Projekt verwendet. Es ist eine gute Java-Bibliothek für Web-Scraping. read here for more

2

könnten Sie versuchen, ui4j oder cdp4j Bibliothek für Web-Scraping. ui4j benötigt Java 8 und verwendet JavaFx WebKit Browser und cdp4j benötigt Chrome.

1

Mithilfe von Web-Scraper können Sie den nützlichen Inhalt von der Webseite extrahieren und in ein beliebiges Format konvertieren.

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

Jetzt Ihre Web-Verschrottung Sitzungsbeginn und bereit, Daten in Java verschrotten oder zu extrahieren webscrap4j library verwenden.

Für Titel:

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

Für Tagline:

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

für alle Anker-Tag:

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

Für Bilddaten:

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

Für Ul-Li Daten:

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

Für die Prüfung vollständigen Quellcode dieser tutorial.

0

Wenn Sie kratzen großer Menge Seiten oder Daten zu automatisieren, dann könnte man Gotz ETL versuchen.

Es ist vollständig modellgesteuert wie ein echtes ETL-Tool. Datenstruktur, Task-Workflow und zu scrapende Seiten werden mit einer Reihe von XML-Definitionsdateien definiert, und es ist keine Codierung erforderlich. Abfrage kann entweder mit Selektoren mit JSoup oder XPath mit HtmlUnit geschrieben werden.

+0

Vor 7 Jahren, 6 Monaten gefragt. – Eritrean