Release Notes
- 1、【提升】爬蟲JS渲染能力強(qiáng)化:升級(jí)提供 "Selenium + ChromeDriver" 方案支持JS渲染,兼容性更高,廢棄舊Phantomjs方案。非JS渲染場景仍然Jsoup,速度更快。同時(shí)支持自由擴(kuò)展其他實(shí)現(xiàn)。
- 2、【優(yōu)化】進(jìn)一步優(yōu)化 Selenium 兼容問題,完善JS渲染場景下兼容性和性能。
- 3、【重構(gòu)】重構(gòu)核心功能模塊,提升擴(kuò)展性;修復(fù)歷史代碼隱藏問題,提升系統(tǒng)穩(wěn)定習(xí)慣。
- 4、【升級(jí)】多個(gè)依賴升級(jí)至更新版本,如jsoup、selenium等。
引入Maven依賴
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-crawler</artifactId>
<version>${最新穩(wěn)定版}</version>
</dependency>
代碼示例
注意:僅供學(xué)習(xí)測(cè)試使用,如有侵犯請(qǐng)聯(lián)系刪除
提示:更多測(cè)試代碼可以前往倉庫查看:測(cè)試代碼目錄
- 爬蟲名稱:Gitee高星項(xiàng)目采集爬蟲
- 爬蟲功能:一行代碼啟動(dòng)多線程爬蟲,分頁方式擴(kuò)散爬取“Gitee開源項(xiàng)目列表”,通過“注解式”自動(dòng)提取頁面數(shù)據(jù),封裝成PageVo輸出;
XxlCrawler crawler = new XxlCrawler.Builder()
.setUrls("https://gitee.com/explore/all?order=starred&page=1") // 設(shè)置爬蟲入口URL
.setAllowSpread(true) // 允許爬蟲擴(kuò)散
.setWhiteUrlRegexs("^https:\\/\\/gitee\\.com\\/explore\\/all\\?order=starred&page=[1-5]$") // 設(shè)置爬蟲擴(kuò)散的URL白名單正則表達(dá)式,控制擴(kuò)散范圍
.setThreadCount(3) // 設(shè)置爬蟲線程池大小
.setPauseMillis(100) // 設(shè)置爬蟲每次抓取間隔時(shí)間,避免對(duì)下游壓力過大
.setPageParser(new PageParser<GiteeProjectPageVo>() {
@Override
public void afterParse(Response<GiteeProjectPageVo> response) {
/**
* 獲取爬蟲結(jié)果數(shù)據(jù):afterParse 會(huì)在多線程爬蟲運(yùn)行過程中實(shí)時(shí)輸出爬蟲結(jié)果數(shù)據(jù),避免結(jié)尾一次性反饋造成大對(duì)象問題;可實(shí)時(shí)消費(fèi)處理數(shù)據(jù),如存儲(chǔ)在DB等。
*/
if (response.getParseVoList() != null) {
for (GiteeProjectPageVo pageVo: response.getParseVoList()) {
logger.info("response.getHtml().baseUri()={}, PageDataVo={}", response.getHtml().baseUri(), pageVo);
}
}
}
})
.build();
crawler.start(true);
簡介
XXL-CRAWLER 是一個(gè)輕量級(jí)Java爬蟲框架。一行代碼開發(fā)一個(gè)多線程爬蟲,全注解方式采集頁面數(shù)據(jù)至Java對(duì)象,擁有"多線程、全注解、JS渲染、代理、分布式擴(kuò)展"等特性;

輸入圖片說明
項(xiàng)目資料
特性
- 1、簡潔:API直觀簡潔,可快速上手;
- 2、輕量級(jí):底層實(shí)現(xiàn)僅強(qiáng)依賴jsoup,簡潔高效;
- 3、模塊化:模塊化的結(jié)構(gòu)設(shè)計(jì),可輕松擴(kuò)展;
- 4、全注解:支持通過注解提取頁面數(shù)據(jù),高效映射頁面數(shù)據(jù)到PageVO對(duì)象,底層自動(dòng)完成PageVO對(duì)象的數(shù)據(jù)抽取和封裝返回;單個(gè)頁面支持抽取一個(gè)或多個(gè)PageVO;
- 5、多線程:線程池方式運(yùn)行,提高采集效率;
- 6、擴(kuò)散全站:支持以現(xiàn)有URL為起點(diǎn)擴(kuò)散爬取整站;
- 7、JS渲染:通過擴(kuò)展 "PageLoader" 模塊,支持采集JS動(dòng)態(tài)渲染數(shù)據(jù)。原生提供 Jsoup(非JS渲染,速度更快)、Selenium+ChromeDriver(JS渲染,兼容性高) 等多種實(shí)現(xiàn),支持自由擴(kuò)展其他實(shí)現(xiàn);
- 8、代理IP:對(duì)抗反采集策略規(guī)則WAF;
- 9、動(dòng)態(tài)代理:支持運(yùn)行時(shí)動(dòng)態(tài)調(diào)整代理池,以及自定義代理池路由策略;
- 10、失敗重試:請(qǐng)求失敗后重試,并支持設(shè)置重試次數(shù);
- 11、異步:支持同步、異步兩種方式運(yùn)行;
- 12、冪等去重:防止重復(fù)爬??;
- 13、URL擴(kuò)散過濾:支持設(shè)置頁面白名單正則,過濾URL;
- 14、分布式支持:通過擴(kuò)展 "RunUrlPool" 模塊,并結(jié)合Redis或DB共享運(yùn)行數(shù)據(jù)可實(shí)現(xiàn)分布式。默認(rèn)提供LocalRunUrlPool單機(jī)版爬蟲;
- 15、自定義請(qǐng)求信息,如:請(qǐng)求參數(shù)、Cookie、Header、UserAgent輪詢、Referrer等;
- 16、動(dòng)態(tài)參數(shù):支持運(yùn)行時(shí)動(dòng)態(tài)調(diào)整請(qǐng)求參數(shù);
- 17、超時(shí)控制:支持設(shè)置爬蟲請(qǐng)求的超時(shí)時(shí)間;
- 18、主動(dòng)停頓:爬蟲線程處理完頁面之后進(jìn)行主動(dòng)停頓,避免過于頻繁被攔截;