XXL-CRAWLER v1.4.0 | Java爬蟲框架

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)停頓,避免過于頻繁被攔截;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容