摘要:面向?qū)ο蟮姆植际脚老x框架一簡介概述是一個面向?qū)ο蟮姆植际脚老x框架。分布式集群集群方式維護爬蟲爬蟲運行數(shù)據(jù),可通過或定制實現(xiàn)。
《面向?qū)ο蟮姆植际脚老x框架XXL-CRAWLER》
XXL-CRAWLER 是一個面向?qū)ο蟮姆植际脚老x框架。一行代碼開發(fā)一個分布式爬蟲,擁有"多線程、異步、IP動態(tài)代理、分布式"等特性;
1.2 特性1、面向?qū)ο螅和ㄟ^VO對象描述頁面信息,提供注解方便的映射頁面數(shù)據(jù),爬取結(jié)果主動封裝Java對象返回;
2、多線程;
3、擴散全站:將會以現(xiàn)有URL為起點擴散爬取整站;
4、去重:防止重復爬取;
5、URL白名單:支持設(shè)置頁面白名單正則,過濾URL;
6、異步:支持同步、異步兩種方式運行;
7、自定義請求信息,如:請求參數(shù)、Cookie、Header、UserAgent輪詢、Referrer等;
8、輕量級:底層實現(xiàn)僅依賴jsoup,簡潔高效;
9、超時控制:支持設(shè)置爬蟲請求的超時時間;
10、主動停頓:爬蟲線程處理完頁面之后進行主動停頓,避免過于頻繁被攔截;
11、單個頁面支持抽取一個或多個PageVO;
12、代理IP:對抗反采集策略規(guī)則WAF;
13、動態(tài)代理:支持運行時動態(tài)調(diào)整代理池,以及自定義代理池路由策略;
14、失敗重試:請求失敗后重試,并支持設(shè)置重試次數(shù);
15、動態(tài)參數(shù):支持運行時動態(tài)調(diào)整請求參數(shù);
16、分布式支持:支持自定義RunData(運行時數(shù)據(jù)模型)并結(jié)合Redis或DB共享運行數(shù)據(jù)來實現(xiàn)分布式。默認提供LocalRunData單機版爬蟲。
1.4 下載 文檔地址中文文檔
源碼倉庫地址源碼倉庫地址 | Release Download |
---|---|
https://github.com/xuxueli/xxl-crawler | Download |
https://gitee.com/xuxueli0323/xxl-crawler | Download |
社區(qū)交流
1.5 環(huán)境JDK:1.7+
二、快速入門 爬蟲示例參考(爬蟲示例代碼位于 /test 目錄下)
1、爬取頁面數(shù)據(jù)并封裝VO對象
2、爬取頁面,下載Html文件
3、爬取頁面,下載圖片文件
4、爬取頁面,代理IP方式
5、爬取公開的免費代理,生成動態(tài)代理池
第一步:引入Maven依賴第二步:定義 "PageVo/頁面數(shù)據(jù)對象"(可選)com.xuxueli xxl-crawler 1.2.0
在此推薦一款工具 "Chrome插件:Jquery Selector Helper",可以直觀迅速的獲取頁面元素的Jquery cssQuery表達式。
// PageSelect 注解:從頁面中抽取出一個或多個VO對象; @PageSelect(cssQuery = "body") public static class PageVo { @PageFieldSelect(cssQuery = ".blog-heading .title") private String title; @PageFieldSelect(cssQuery = "#read") private int read; @PageFieldSelect(cssQuery = ".comment-content") private List第三步:創(chuàng)建爬蟲comment; // set get }
XxlCrawler crawler = new XxlCrawler.Builder() .setUrls("https://my.oschina.net/xuxueli/blog") .setWhiteUrlRegexs("https://my.oschina.net/xuxueli/blog/d+") .setThreadCount(3) .setPageParser(new PageParser第四步:啟動爬蟲() { @Override public void parse(Document html, Element pageVoElement, PageVo pageVo) { // 解析封裝 PageVo 對象 String pageUrl = html.baseUri(); System.out.println(pageUrl + ":" + pageVo.toString()); } }) .build();
crawler.start(true);三、總體設(shè)計 架構(gòu)圖 3.1 功能定位
XXL-CRAWLER 是一個靈活高效、面向?qū)ο蟮腤eb爬蟲框架。;
借助 XXL-CRAWLER,一行代碼開發(fā)一個分布式爬蟲。
3.2 核心概念概念 | 說明 |
---|---|
XxlCrawler | 爬蟲對象,維護爬蟲信息 |
PageVo | 頁面數(shù)據(jù)對象,一張Web頁面可抽取一個或多個PageVo |
PageParser | 頁面解析器,綁定泛型PageVO后將會自動抽取頁面數(shù)據(jù)對象,同時支持運行時調(diào)整請求參數(shù)信息 |
功能:爬蟲對象,維護爬蟲信息,可選屬性如下。
方法 | 說明 |
---|---|
setUrls | 待爬的URL列表 |
setAllowSpread | 允許擴散爬取,將會以現(xiàn)有URL為起點擴散爬取整站 |
setWhiteUrlRegexs | URL白名單正則,非空時進行URL白名單過濾頁面 |
setIfPost | 請求方式:true=POST請求、false=GET請求 |
setUserAgent | UserAgent |
setParamMap | 請求參數(shù) |
setCookieMap | 請求Cookie |
setTimeoutMillis | 超時時間,毫秒 |
setPauseMillis | 停頓時間,爬蟲線程處理完頁面之后進行主動停頓,避免過于頻繁被攔截; |
setProxyMaker | 代理生成器,支持設(shè)置代理IP,同時支持調(diào)整代理池實現(xiàn)動態(tài)代理; |
setThreadCount | 爬蟲并發(fā)線程數(shù) |
setPageParser | 頁面解析器 |
setRunData | 設(shè)置運行時數(shù)據(jù)模型,默認提供LocalRunData單機模型,支持擴展實現(xiàn)分布式模型; |
start | 運行爬蟲,可通過入?yún)⒖刂仆交虍惒椒绞竭\行 |
stop | 終止爬蟲 |
功能:描述頁面數(shù)據(jù)對象,通過該注解從頁面抽取PageVo數(shù)據(jù)信息,可選屬性如下。
PageSelect | 說明 |
---|---|
cssQuery | CSS選擇器, 如 "#body" |
功能:描述頁面數(shù)據(jù)對象的屬性信息,通過該注解從頁面抽取PageVo的屬性信息,可選屬性如下。
(支持基礎(chǔ)數(shù)據(jù)類型 T ,包括 List
PageFieldSelect | 說明 |
---|---|
cssQuery | CSS選擇器, 如 "#title" |
selectType | jquery 數(shù)據(jù)抽取方式,如 ".html()/.text()/.val()/.attr()"等 |
selectVal | jquery 數(shù)據(jù)抽取參數(shù),SelectType=ATTR 時有效,如 ".attr("abs:src")" |
datePattern | 時間格式化,日期類型數(shù)據(jù)有效 |
以線程池方式并行運行,提供對應(yīng)API(可參考"章節(jié)3.3")調(diào)整線程池大小,提高運行效率;
3.7 異步支持同步、異步兩種方式啟動運行。
同步:將會阻塞業(yè)務(wù)邏輯,爬蟲爬取完全部頁面后才會繼續(xù)執(zhí)行后續(xù)邏輯。
異步:不會阻塞業(yè)務(wù)邏輯,爬蟲邏輯以異步方式運行。
3.8 動態(tài)代理ProxyMaker(代理生成器):實現(xiàn)代理支持的組件。支持設(shè)置代理IP,同時支持調(diào)整代理池實現(xiàn)動態(tài)代理;
系統(tǒng)已經(jīng)提供了兩種策略實現(xiàn);
RoundProxyMaker(循環(huán)代理生成器): 以循環(huán)方式獲取代理池中代理;
RandomProxyMaker(隨機代理生成器): 以隨機方式獲取代理池中代理;
3.9、PageParserPageParser(頁面解析器):綁定泛型PageVO后將會自動抽取頁面數(shù)據(jù)對象,同時支持運行時調(diào)整請求參數(shù)信息;
內(nèi)部方法 | 說明 |
---|---|
public void preLoad(PageLoadInfo pageLoadInfo) | 可選實現(xiàn),發(fā)起頁面請求之前觸發(fā)調(diào)用,可基于此運行時調(diào)整請求參數(shù); |
public void postLoad(Document html) | 可選實現(xiàn),發(fā)起頁面請求之后觸發(fā)調(diào)用,可基于此運行時調(diào)整頁面數(shù)據(jù); |
public abstract void parse(Document html, Element pageVoElement, T pageVo) | 必須實現(xiàn),頁面抽離封裝每個PageVO之后觸發(fā)調(diào)用,可基于此處理PageVO文檔或數(shù)據(jù); |
支持自定義RunData(運行時數(shù)據(jù)模型)并結(jié)合Redis或DB共享運行數(shù)據(jù)來實現(xiàn)分布式爬蟲。默認提供LocalRunData實現(xiàn)單機版爬蟲。
RunData:運行時數(shù)據(jù)模型,維護爬蟲運行時的URL和白名單規(guī)則。
單機:單機方式維護爬蟲運行數(shù)據(jù),默認提供 "LocalRunData" 的單機版實現(xiàn)。
分布式/集群:集群方式維護爬蟲爬蟲運行數(shù)據(jù),可通過Redis或DB定制實現(xiàn)。
RunData抽象方法 | 說明 |
---|---|
public abstract boolean addUrl(String link); | 新增一個待采集的URL,接口需要做URL去重,爬蟲線程將會獲取到并進行處理; |
public abstract String getUrl(); | 獲取一個待采集的URL,并且將它從"待采集URL池"中移除,并且添加到"已采集URL池"中; |
public abstract int getUrlNum(); | 獲取待采集URL數(shù)量; |
1、面向?qū)ο螅和ㄟ^VO對象描述頁面信息,提供注解方便的映射頁面數(shù)據(jù),爬取結(jié)果主動封裝Java對象返回;
2、多線程:線程池方式并行運行;
3、異步:支持同步、異步兩種方式運行;
4、擴散全站:支持以入口URL為起點擴散爬取整站;
5、去重:防止重復爬取;
6、URL白名單:支持設(shè)置頁面白名單正則,過濾URL;
7、自定義請求信息,如:請求參數(shù)、Cookie、Header、UserAgent輪詢、Referrer等;
8、輕量級:底層實現(xiàn)僅依賴jsoup,簡潔高效;
9、超時控制:支持設(shè)置爬蟲請求的超時時間;
10、主動停頓:爬蟲線程處理完頁面之后進行主動停頓,避免過于頻繁被攔截;
11、單個頁面支持抽取一個或多個PageVO;
版本 V1.1.0,新特性[2017-11-08]1、頁面默認cssQuery調(diào)整為html標簽;
2、升級Jsoup至1.11.1版本;
3、修復PageVO注解失效的問題;
4、屬性注解參數(shù)attributeKey調(diào)整為selectVal;
5、代理IP:對抗反采集策略規(guī)則WAF;
6、動態(tài)代理:支持運行時動態(tài)調(diào)整代理池,以及自定義代理池路由策略;
版本 V1.2.0,新特性[2017-12-14]1、爬蟲Builder底層API優(yōu)化;
2、支持設(shè)置請求Headers;
3、支持設(shè)置多UserAgent輪詢;
4、失敗重試:支持請求失敗后主動重試,并支持設(shè)置重試次數(shù);
5、動態(tài)參數(shù):支持運行時動態(tài)調(diào)整請求參數(shù);
6、分布式支持:支持自定義RunData(運行時數(shù)據(jù)模型)并結(jié)合Redis或DB共享運行數(shù)據(jù)來實現(xiàn)分布式。默認提供LocalRunData單機版爬蟲。
版本 V1.2.1,新特性[迭代中]1、對抗爬蟲蜜罐;
TODO LIST1、擴展SelectType;
2、js渲染;
五、其他 5.1 項目貢獻歡迎參與項目貢獻!比如提交PR修復一個bug,或者新建 Issue 討論新特性或者變更。
5.2 用戶接入登記更多接入的公司,歡迎在 登記地址 登記,登記僅僅為了產(chǎn)品推廣。
5.3 開源協(xié)議和版權(quán)產(chǎn)品開源免費,并且將持續(xù)提供免費的社區(qū)技術(shù)支持。個人或企業(yè)內(nèi)部可自由的接入和使用。
Licensed under the GNU General Public License (GPL) v3.
Copyright (c) 2015-present, xuxueli.
捐贈無論金額多少都足夠表達您這份心意,非常感謝 :) 前往捐贈
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/67954.html
摘要:新特性系統(tǒng)底層重構(gòu),規(guī)范包名采集線程白名單過濾優(yōu)化,避免冗余失敗重試增強渲染方式采集能力,原生新提供,支持以方式采集頁面數(shù)據(jù)支持采集非頁面,如接口等,直接輸出響應(yīng)數(shù)據(jù)選擇即可簡介是一個分布式爬蟲框架。默認提供單機版爬蟲。 v1.2.2 新特性 1、系統(tǒng)底層重構(gòu),規(guī)范包名; 2、采集線程白名單過濾優(yōu)化,避免冗余失敗重試; 3、增強JS渲染方式采集能力,原生新提供 SeleniumPha...
摘要:版本新特性渲染支持渲染方式采集數(shù)據(jù),可參考爬蟲示例抽象并設(shè)計,方便自定義和擴展頁面加載邏輯,如渲染等。默認提供單機版爬蟲。渲染通過擴展模塊,支持采集動態(tài)渲染數(shù)據(jù)。原生提供快速推薦和較慢渲染兩種實現(xiàn),支持自由擴展其他實現(xiàn)。 版本新特性 1、JS渲染:支持JS渲染方式采集數(shù)據(jù),可參考 爬蟲示例6; 2、抽象并設(shè)計PageLoader,方便自定義和擴展頁面加載邏輯,如JS渲染等。底層提供 ...
摘要:電子表格使用語言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來實現(xiàn)一個簡單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創(chuàng)并首發(fā)于公眾號【Python貓】,未經(jīng)授權(quán),請勿轉(zhuǎn)載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...
摘要:電子表格使用語言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來實現(xiàn)一個簡單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創(chuàng)并首發(fā)于公眾號【Python貓】,未經(jīng)授權(quán),請勿轉(zhuǎn)載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...
閱讀 2002·2023-04-26 01:44
閱讀 1337·2021-11-12 10:34
閱讀 1690·2021-09-09 09:33
閱讀 1813·2019-08-30 15:44
閱讀 2955·2019-08-30 13:49
閱讀 2264·2019-08-29 15:26
閱讀 1000·2019-08-26 13:30
閱讀 1481·2019-08-23 18:15