1. 程式人生 > >我的第一個開源專案

我的第一個開源專案

地址

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();

侷限

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

感謝

  • elves:參考了該專案思想
  • WebCollector:參考了該專案思想
  • Jsoup:用於下載和解析網頁
  • h2 database:提供快取
  • DbUtils:操作資料庫