關於Java爬蟲的研究


起因

最近突然發了羊癲瘋,對爬蟲十分感興趣,開始想寫幾個爬蟲練練手,於是,洗手開搞。

像我這種懶人,對爬蟲了解個大概之后就開始偷懶了,開始找框架了,Google關鍵字“Java 爬蟲”,第一個搜索結果就是

高票回答推薦的幾款爬蟲框架:nutch、Heritrix、crawler4j、WebCollector和WebMagic,果斷選擇了WebMagic,支持國人作品嘛(肯定是中文文檔啊

下手

 

使用Maven添加框架到項目中,在poxm.xml文件中添加以下依賴。國內的Maven庫居然沒有WebMagic,淚奔,頂着延遲添加了依賴。

<dependency>
        <groupId>us.codecraft</groupId>
        <artifactId>webmagic-core</artifactId>
        <version>0.5.3</version>
</dependency>
<dependency>
        <groupId>us.codecraft</groupId>
        <artifactId>webmagic-extension</artifactId>
        <version>0.5.3</version>
</dependency>

依賴添加成功如下圖所示:

直接從開發文檔的例子入手,主要是有三個部分:

  • 抓取網站的相關配置
  • 抽取頁面信息的方法
  • 發現后續url地址

WebMagic提供了一個Site類用於設置抓取網站的相關屬性,例如,設置失敗時重試次數為3次,抓取間隔為1秒的代碼如下所示:

private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

抽取頁面信息的方法

WebMagic通過重寫PageProcessor的process()方法來實現爬蟲的基本邏輯功能。

WebMagic提供了四種用於抽取數據的方法:

對於HTML內容來說,可以通過XPath、CSS選擇器和正則表達式這三種方法抽取內容;對於JSON格式的數據可以通過JsonPath方法抽取內容。

下面是抽取內容的API表:

 

方法 說明 示例
xpath(String xpath) 使用XPath選擇 html.xpath("//div[@class='title']")
$(String selector) 使用Css選擇器選擇 html.$("div.title")
$(String selector,String attr) 使用Css選擇器選擇 html.$("div.title","text")
css(String selector) 功能同$(),使用Css選擇器選擇 html.css("div.title")
links() 選擇所有鏈接 html.links()
regex(String regex) 使用正則表達式抽取 html.regex("\<div\>(.*?)\")
regex(String regex,int group) 使用正則表達式抽取,並指定捕獲組 html.regex("\<div\>(.*?)\",1)
replace(String regex, String replacement) 替換內容 html.replace("\","")

發現后續url地址

一個站點的頁面是非常多的,那么我們怎么在發現並抽取了一個頁面之后進行鏈式的挖掘呢?這事爬蟲程序非常關鍵的部分,對鏈式

答案是通過正則表達式構造待挖掘的url格式,調用page對象(不是頁面對象page,是process()方法提供的參數對象page)的addtargetRequests()方法,將url添加到待挖掘的url中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM