2010-07-08 117 views
56

我無法找到任何好的網頁抓取基於Java的API。我需要刮的網站也不提供任何API;我想用一些pageID迭代所有的網頁,並在他們的DOM樹中提取HTML標題/其他東西。用Java抓取網頁

除了網頁抓取以外,還有其他方法嗎?

感謝

回答

75

提取標題並不難,而且你有很多選擇,在這裏搜索Stack Overflow上的「Java的HTML解析器」。其中之一是Jsoup

可以導航使用DOM如果知道頁面結構的頁面,看到 http://jsoup.org/cookbook/extracting-data/dom-navigation

這是一個好的圖書館,我已經在我的最後一個項目中使用它。

+2

謝謝,它是一個很好的庫,沒有依賴關係,所以它非常輕便。此外,它是無頭的,所以它不需要瀏覽器(我曾遇到** Selenium **開放Chrome的問題,我根本無法使用** HtmlUnit **)。 ** Selenium **必須更現實一些,但是這個庫可能在大多數情況下都能達到目的,而且設置起來非常簡單:添加依賴關係,你很好。 – 2014-05-31 17:13:24

+0

確實是非常出色的圖書館。易於安裝和強大的正則表達式支持。 doc.select( 「利[ID^= cosid_]」)。涼。 – EMM 2016-07-19 15:21:13

+0

我最近開放了我的網頁抓取框架,它不僅可以使用Jsoup和HtmlUnit解析文檔,還可以爲您處理並行處理,並且可以管理大量的代理服務器池(如果需要):https://github.com/subes/invesdwin-webproxy – subes 2017-06-09 18:57:44

2

查看HTML解析器,如TagSoup,HTMLCleaner或NekoHTML。

19

最好的辦法是使用Selenium網絡驅動器,因爲它

  1. 提供視覺反饋到編碼器(在行動中看到你的拼搶,看到它停止)
  2. 準確和一致的,因爲它直接控制您使用的瀏覽器。
  3. 慢。不像HtmlUnit那樣打網頁,但有時你不想打得太快。

    Htmlunit速度很快,但在處理Javascript和AJAX時很糟糕。

12

的HtmlUnit可以用來做網頁刮,它支持調用頁面,填寫&提交表單。我在我的項目中使用了這個。這是一個很好的網絡抓取Java庫。 read here for more

2

你可以嘗試ui4jcdp4j庫網頁抓取。 ui4j需要Java 8並使用JavaFx WebKit瀏覽器,而cdp4j需要Chrome。

1

使用網頁抓取工具,您可以從網頁中提取有用的內容,並將其轉換爲適用的任何格式。

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

現在你的網絡報廢會話啓動,並準備報廢或使用webscrap4j library提取Java數據。

標題:

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

爲口號:

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

對於所有錨標記:

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

用於圖像數據:

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

用於UL利內容:

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

對於完整的源代碼檢查此tutorial

0

如果你想自動化的大量網頁或數據廢棄,那麼你可以嘗試Gotz ETL

它完全是模型驅動的,就像一個真正的ETL工具。數據結構,任務工作流程和要抓取的頁面用一組XML定義文件定義,不需要編碼。可以使用帶有JSoup的選擇器或帶有HtmlUnit的XPath來編寫查詢。

+0

問7年,6個月前。 – Eritrean 2018-01-23 17:32:36