我的第一個開源專案
阿新 • • 發佈:2019-10-09
地址
gitee地址
專案介紹
一個簡單的多執行緒爬蟲,具有斷點爬取功能,以及自動推測網頁編碼功能
使用jdk11+,maven構建,我使用jdk11.0.2時會報錯,見https://bugs.openjdk.java.net/browse/JDK-8213202,jdk8卻沒有,jdk本身的bug,所以我換了最新版的jdk11.0.4
解析網頁主要使用了Jsoup和正則表示式,所以這兩個需要會用
使用說明
使用見example包中的示例,我就只說一下思路:先有一個或多個具體的初始連結,假如說把這些初始連結的頁面記為seed,然後定義一個規則,規則主要由Jsoup選擇器(類似於css選擇器)、正則、type組成。seed頁面應用規則,自動獲取所有符合規則的連結,記為page1(假設type設定成了page1),然後所有的page1頁面再應用下一個規則,依此類推,想要多少層都可以,注意,每層的type都不應該與其他層的type相同
定義規則自動獲取下層連結,有時候可能得不到想要的結果,這時候可以試試手動獲取,然後通過呼叫Page中的addNext...方法將手動獲取的連結新增到下一層
Page中還有3個引數是函式式介面的方法,作用是篩選連結,攜帶資訊到下一層,連結對映,具體見方法說明和示例
如果以上沒有說明白,就自行檢視原始碼,原始碼比較簡單
示例
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:操作資料庫