我的第一個開源項目

  • 2019 年 10 月 9 日
  • 筆記

地址

gitee地址

項目介紹

  1. 一個簡單的多執行緒爬蟲,具有斷點爬取功能,以及自動推測網頁編碼功能

  2. 使用jdk11+,maven構建,我使用jdk11.0.2時會報錯,見https://bugs.openjdk.java.net/browse/JDK-8213202,jdk8卻沒有,jdk本身的bug,所以我換了最新版的jdk11.0.4

  3. 解析網頁主要使用了Jsoup和正則表達式,所以這兩個需要會用

使用說明

  1. 使用見example包中的示例,我就只說一下思路:先有一個或多個具體的初始鏈接,假如說把這些初始鏈接的頁面記為seed,然後定義一個規則,規則主要由Jsoup選擇器(類似於css選擇器)、正則、type組成。seed頁面應用規則,自動獲取所有符合規則的鏈接,記為page1(假設type設置成了page1),然後所有的page1頁面再應用下一個規則,依此類推,想要多少層都可以,注意,每層的type都不應該與其他層的type相同

  2. 定義規則自動獲取下層鏈接,有時候可能得不到想要的結果,這時候可以試試手動獲取,然後通過調用Page中的addNext…方法將手動獲取的鏈接添加到下一層

  3. Page中還有3個參數是函數式介面的方法,作用是篩選鏈接,攜帶資訊到下一層,鏈接映射,具體見方法說明和示例

  4. 如果以上沒有說明白,就自行查看源程式碼,源程式碼比較簡單

示例

ZongHeng zh = new ZongHeng();  zh.setCacheDirectory("f:/spider");  zh.config().setInterval(50).setBreakPoint(false);  //添加一個初始鏈接  zh.addSeed("http://www.zongheng.com/");  //添加一個規則,按照這個規則在初始鏈接頁面取鏈接,並將取到的鏈接代表的頁面記為category  zh.addRule("ul#data-groupdom li a", "http://www.zongheng.com/category/\d+.html", "category");  //添加規則,在category頁面取鏈接  zh.addRegex("http://book.zongheng.com/book/\d+.html", "book");  zh.start();

局限

由於自動快取的原因,編寫好規則並爬取後,如果再次修改規則,如加入篩選條件等,由於從快取中取數據,此時篩選條件對已經爬取的網頁不起作用,要使它起作用,請刪除快取

感謝