成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

面向?qū)ο蟮姆植际脚老x(chóng)框架XXL-CRAWLER

anquan / 2795人閱讀

摘要:面向?qū)ο蟮姆植际脚老x(chóng)框架一簡(jiǎn)介概述是一個(gè)面向?qū)ο蟮姆植际脚老x(chóng)框架。分布式集群集群方式維護(hù)爬蟲(chóng)爬蟲(chóng)運(yùn)行數(shù)據(jù),可通過(guò)或定制實(shí)現(xiàn)。

《面向?qū)ο蟮姆植际脚老x(chóng)框架XXL-CRAWLER》




一、簡(jiǎn)介 1.1 概述

XXL-CRAWLER 是一個(gè)面向?qū)ο蟮姆植际脚老x(chóng)框架。一行代碼開(kāi)發(fā)一個(gè)分布式爬蟲(chóng),擁有"多線(xiàn)程、異步、IP動(dòng)態(tài)代理、分布式"等特性;

1.2 特性

1、面向?qū)ο螅和ㄟ^(guò)VO對(duì)象描述頁(yè)面信息,提供注解方便的映射頁(yè)面數(shù)據(jù),爬取結(jié)果主動(dòng)封裝Java對(duì)象返回;

2、多線(xiàn)程;

3、擴(kuò)散全站:將會(huì)以現(xiàn)有URL為起點(diǎn)擴(kuò)散爬取整站;

4、去重:防止重復(fù)爬取;

5、URL白名單:支持設(shè)置頁(yè)面白名單正則,過(guò)濾URL;

6、異步:支持同步、異步兩種方式運(yùn)行;

7、自定義請(qǐng)求信息,如:請(qǐng)求參數(shù)、Cookie、Header、UserAgent輪詢(xún)、Referrer等;

8、輕量級(jí):底層實(shí)現(xiàn)僅依賴(lài)jsoup,簡(jiǎn)潔高效;

9、超時(shí)控制:支持設(shè)置爬蟲(chóng)請(qǐng)求的超時(shí)時(shí)間;

10、主動(dòng)停頓:爬蟲(chóng)線(xiàn)程處理完頁(yè)面之后進(jìn)行主動(dòng)停頓,避免過(guò)于頻繁被攔截;

11、單個(gè)頁(yè)面支持抽取一個(gè)或多個(gè)PageVO;

12、代理IP:對(duì)抗反采集策略規(guī)則WAF;

13、動(dòng)態(tài)代理:支持運(yùn)行時(shí)動(dòng)態(tài)調(diào)整代理池,以及自定義代理池路由策略;

14、失敗重試:請(qǐng)求失敗后重試,并支持設(shè)置重試次數(shù);

15、動(dòng)態(tài)參數(shù):支持運(yùn)行時(shí)動(dòng)態(tài)調(diào)整請(qǐng)求參數(shù);

16、分布式支持:支持自定義RunData(運(yùn)行時(shí)數(shù)據(jù)模型)并結(jié)合Redis或DB共享運(yùn)行數(shù)據(jù)來(lái)實(shí)現(xiàn)分布式。默認(rèn)提供LocalRunData單機(jī)版爬蟲(chóng)。

1.4 下載 文檔地址

中文文檔

源碼倉(cāng)庫(kù)地址
源碼倉(cāng)庫(kù)地址 Release Download
https://github.com/xuxueli/xxl-crawler Download
https://gitee.com/xuxueli0323/xxl-crawler Download
技術(shù)交流

社區(qū)交流

1.5 環(huán)境

JDK:1.7+

二、快速入門(mén) 爬蟲(chóng)示例參考

(爬蟲(chóng)示例代碼位于 /test 目錄下)

1、爬取頁(yè)面數(shù)據(jù)并封裝VO對(duì)象

2、爬取頁(yè)面,下載Html文件

3、爬取頁(yè)面,下載圖片文件

4、爬取頁(yè)面,代理IP方式

5、爬取公開(kāi)的免費(fèi)代理,生成動(dòng)態(tài)代理池

第一步:引入Maven依賴(lài)

    com.xuxueli
    xxl-crawler
    1.2.0
第二步:定義 "PageVo/頁(yè)面數(shù)據(jù)對(duì)象"(可選)
在此推薦一款工具 "Chrome插件:Jquery Selector Helper",可以直觀(guān)迅速的獲取頁(yè)面元素的Jquery cssQuery表達(dá)式。
// PageSelect 注解:從頁(yè)面中抽取出一個(gè)或多個(gè)VO對(duì)象;
@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 comment;

    // set get
}
第三步:創(chuàng)建爬蟲(chóng)
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 對(duì)象
            String pageUrl = html.baseUri();
            System.out.println(pageUrl + ":" + pageVo.toString());
        }
    })
    .build();
第四步:?jiǎn)?dòng)爬蟲(chóng)
crawler.start(true);
三、總體設(shè)計(jì) 架構(gòu)圖

3.1 功能定位

XXL-CRAWLER 是一個(gè)靈活高效、面向?qū)ο蟮腤eb爬蟲(chóng)框架。;

借助 XXL-CRAWLER,一行代碼開(kāi)發(fā)一個(gè)分布式爬蟲(chóng)。

3.2 核心概念
概念 說(shuō)明
XxlCrawler 爬蟲(chóng)對(duì)象,維護(hù)爬蟲(chóng)信息
PageVo 頁(yè)面數(shù)據(jù)對(duì)象,一張Web頁(yè)面可抽取一個(gè)或多個(gè)PageVo
PageParser 頁(yè)面解析器,綁定泛型PageVO后將會(huì)自動(dòng)抽取頁(yè)面數(shù)據(jù)對(duì)象,同時(shí)支持運(yùn)行時(shí)調(diào)整請(qǐng)求參數(shù)信息
3.3 爬蟲(chóng)對(duì)象:XxlCrawler

功能:爬蟲(chóng)對(duì)象,維護(hù)爬蟲(chóng)信息,可選屬性如下。

方法 說(shuō)明
setUrls 待爬的URL列表
setAllowSpread 允許擴(kuò)散爬取,將會(huì)以現(xiàn)有URL為起點(diǎn)擴(kuò)散爬取整站
setWhiteUrlRegexs URL白名單正則,非空時(shí)進(jìn)行URL白名單過(guò)濾頁(yè)面
setIfPost 請(qǐng)求方式:true=POST請(qǐng)求、false=GET請(qǐng)求
setUserAgent UserAgent
setParamMap 請(qǐng)求參數(shù)
setCookieMap 請(qǐng)求Cookie
setTimeoutMillis 超時(shí)時(shí)間,毫秒
setPauseMillis 停頓時(shí)間,爬蟲(chóng)線(xiàn)程處理完頁(yè)面之后進(jìn)行主動(dòng)停頓,避免過(guò)于頻繁被攔截;
setProxyMaker 代理生成器,支持設(shè)置代理IP,同時(shí)支持調(diào)整代理池實(shí)現(xiàn)動(dòng)態(tài)代理;
setThreadCount 爬蟲(chóng)并發(fā)線(xiàn)程數(shù)
setPageParser 頁(yè)面解析器
setRunData 設(shè)置運(yùn)行時(shí)數(shù)據(jù)模型,默認(rèn)提供LocalRunData單機(jī)模型,支持?jǐn)U展實(shí)現(xiàn)分布式模型;
start 運(yùn)行爬蟲(chóng),可通過(guò)入?yún)⒖刂仆交虍惒椒绞竭\(yùn)行
stop 終止爬蟲(chóng)
3.4 核心注解:PageSelect

功能:描述頁(yè)面數(shù)據(jù)對(duì)象,通過(guò)該注解從頁(yè)面抽取PageVo數(shù)據(jù)信息,可選屬性如下。

PageSelect 說(shuō)明
cssQuery CSS選擇器, 如 "#body"
3.5 核心注解:PageFieldSelect

功能:描述頁(yè)面數(shù)據(jù)對(duì)象的屬性信息,通過(guò)該注解從頁(yè)面抽取PageVo的屬性信息,可選屬性如下。
(支持基礎(chǔ)數(shù)據(jù)類(lèi)型 T ,包括 List

PageFieldSelect 說(shuō)明
cssQuery CSS選擇器, 如 "#title"
selectType jquery 數(shù)據(jù)抽取方式,如 ".html()/.text()/.val()/.attr()"等
selectVal jquery 數(shù)據(jù)抽取參數(shù),SelectType=ATTR 時(shí)有效,如 ".attr("abs:src")"
datePattern 時(shí)間格式化,日期類(lèi)型數(shù)據(jù)有效
3.6 多線(xiàn)程

以線(xiàn)程池方式并行運(yùn)行,提供對(duì)應(yīng)API(可參考"章節(jié)3.3")調(diào)整線(xiàn)程池大小,提高運(yùn)行效率;

3.7 異步

支持同步、異步兩種方式啟動(dòng)運(yùn)行。

同步:將會(huì)阻塞業(yè)務(wù)邏輯,爬蟲(chóng)爬取完全部頁(yè)面后才會(huì)繼續(xù)執(zhí)行后續(xù)邏輯。

異步:不會(huì)阻塞業(yè)務(wù)邏輯,爬蟲(chóng)邏輯以異步方式運(yùn)行。

3.8 動(dòng)態(tài)代理

ProxyMaker(代理生成器):實(shí)現(xiàn)代理支持的組件。支持設(shè)置代理IP,同時(shí)支持調(diào)整代理池實(shí)現(xiàn)動(dòng)態(tài)代理;

系統(tǒng)已經(jīng)提供了兩種策略實(shí)現(xiàn);

RoundProxyMaker(循環(huán)代理生成器): 以循環(huán)方式獲取代理池中代理;

RandomProxyMaker(隨機(jī)代理生成器): 以隨機(jī)方式獲取代理池中代理;

3.9、PageParser

PageParser(頁(yè)面解析器):綁定泛型PageVO后將會(huì)自動(dòng)抽取頁(yè)面數(shù)據(jù)對(duì)象,同時(shí)支持運(yùn)行時(shí)調(diào)整請(qǐng)求參數(shù)信息;

內(nèi)部方法 說(shuō)明
public void preLoad(PageLoadInfo pageLoadInfo) 可選實(shí)現(xiàn),發(fā)起頁(yè)面請(qǐng)求之前觸發(fā)調(diào)用,可基于此運(yùn)行時(shí)調(diào)整請(qǐng)求參數(shù);
public void postLoad(Document html) 可選實(shí)現(xiàn),發(fā)起頁(yè)面請(qǐng)求之后觸發(fā)調(diào)用,可基于此運(yùn)行時(shí)調(diào)整頁(yè)面數(shù)據(jù);
public abstract void parse(Document html, Element pageVoElement, T pageVo) 必須實(shí)現(xiàn),頁(yè)面抽離封裝每個(gè)PageVO之后觸發(fā)調(diào)用,可基于此處理PageVO文檔或數(shù)據(jù);
3.10、分布式支持 & RunData

支持自定義RunData(運(yùn)行時(shí)數(shù)據(jù)模型)并結(jié)合Redis或DB共享運(yùn)行數(shù)據(jù)來(lái)實(shí)現(xiàn)分布式爬蟲(chóng)。默認(rèn)提供LocalRunData實(shí)現(xiàn)單機(jī)版爬蟲(chóng)。

RunData:運(yùn)行時(shí)數(shù)據(jù)模型,維護(hù)爬蟲(chóng)運(yùn)行時(shí)的URL和白名單規(guī)則。

單機(jī):?jiǎn)螜C(jī)方式維護(hù)爬蟲(chóng)運(yùn)行數(shù)據(jù),默認(rèn)提供 "LocalRunData" 的單機(jī)版實(shí)現(xiàn)。

分布式/集群:集群方式維護(hù)爬蟲(chóng)爬蟲(chóng)運(yùn)行數(shù)據(jù),可通過(guò)Redis或DB定制實(shí)現(xiàn)。

RunData抽象方法 說(shuō)明
public abstract boolean addUrl(String link); 新增一個(gè)待采集的URL,接口需要做URL去重,爬蟲(chóng)線(xiàn)程將會(huì)獲取到并進(jìn)行處理;
public abstract String getUrl(); 獲取一個(gè)待采集的URL,并且將它從"待采集URL池"中移除,并且添加到"已采集URL池"中;
public abstract int getUrlNum(); 獲取待采集URL數(shù)量;
四、版本更新日志 版本 V1.0.0,新特性[2017-09-13]

1、面向?qū)ο螅和ㄟ^(guò)VO對(duì)象描述頁(yè)面信息,提供注解方便的映射頁(yè)面數(shù)據(jù),爬取結(jié)果主動(dòng)封裝Java對(duì)象返回;

2、多線(xiàn)程:線(xiàn)程池方式并行運(yùn)行;

3、異步:支持同步、異步兩種方式運(yùn)行;

4、擴(kuò)散全站:支持以入口URL為起點(diǎn)擴(kuò)散爬取整站;

5、去重:防止重復(fù)爬?。?/p>

6、URL白名單:支持設(shè)置頁(yè)面白名單正則,過(guò)濾URL;

7、自定義請(qǐng)求信息,如:請(qǐng)求參數(shù)、Cookie、Header、UserAgent輪詢(xún)、Referrer等;

8、輕量級(jí):底層實(shí)現(xiàn)僅依賴(lài)jsoup,簡(jiǎn)潔高效;

9、超時(shí)控制:支持設(shè)置爬蟲(chóng)請(qǐng)求的超時(shí)時(shí)間;

10、主動(dòng)停頓:爬蟲(chóng)線(xiàn)程處理完頁(yè)面之后進(jìn)行主動(dòng)停頓,避免過(guò)于頻繁被攔截;

11、單個(gè)頁(yè)面支持抽取一個(gè)或多個(gè)PageVO;

版本 V1.1.0,新特性[2017-11-08]

1、頁(yè)面默認(rèn)cssQuery調(diào)整為html標(biāo)簽;

2、升級(jí)Jsoup至1.11.1版本;

3、修復(fù)PageVO注解失效的問(wèn)題;

4、屬性注解參數(shù)attributeKey調(diào)整為selectVal;

5、代理IP:對(duì)抗反采集策略規(guī)則WAF;

6、動(dòng)態(tài)代理:支持運(yùn)行時(shí)動(dòng)態(tài)調(diào)整代理池,以及自定義代理池路由策略;

版本 V1.2.0,新特性[2017-12-14]

1、爬蟲(chóng)Builder底層API優(yōu)化;

2、支持設(shè)置請(qǐng)求Headers;

3、支持設(shè)置多UserAgent輪詢(xún);

4、失敗重試:支持請(qǐng)求失敗后主動(dòng)重試,并支持設(shè)置重試次數(shù);

5、動(dòng)態(tài)參數(shù):支持運(yùn)行時(shí)動(dòng)態(tài)調(diào)整請(qǐng)求參數(shù);

6、分布式支持:支持自定義RunData(運(yùn)行時(shí)數(shù)據(jù)模型)并結(jié)合Redis或DB共享運(yùn)行數(shù)據(jù)來(lái)實(shí)現(xiàn)分布式。默認(rèn)提供LocalRunData單機(jī)版爬蟲(chóng)。

版本 V1.2.1,新特性[迭代中]

1、對(duì)抗爬蟲(chóng)蜜罐;

TODO LIST

1、擴(kuò)展SelectType;

2、js渲染;

五、其他 5.1 項(xiàng)目貢獻(xiàn)

歡迎參與項(xiàng)目貢獻(xiàn)!比如提交PR修復(fù)一個(gè)bug,或者新建 Issue 討論新特性或者變更。

5.2 用戶(hù)接入登記

更多接入的公司,歡迎在 登記地址 登記,登記僅僅為了產(chǎn)品推廣。

5.3 開(kāi)源協(xié)議和版權(quán)

產(chǎn)品開(kāi)源免費(fèi),并且將持續(xù)提供免費(fèi)的社區(qū)技術(shù)支持。個(gè)人或企業(yè)內(nèi)部可自由的接入和使用。

Licensed under the GNU General Public License (GPL) v3.

Copyright (c) 2015-present, xuxueli.

捐贈(zèng)

無(wú)論金額多少都足夠表達(dá)您這份心意,非常感謝 :) 前往捐贈(zèng)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67954.html

相關(guān)文章

  • XXL-CRAWLER v1.2.2 發(fā)布,布式爬蟲(chóng)框架

    摘要:新特性系統(tǒng)底層重構(gòu),規(guī)范包名采集線(xiàn)程白名單過(guò)濾優(yōu)化,避免冗余失敗重試增強(qiáng)渲染方式采集能力,原生新提供,支持以方式采集頁(yè)面數(shù)據(jù)支持采集非頁(yè)面,如接口等,直接輸出響應(yīng)數(shù)據(jù)選擇即可簡(jiǎn)介是一個(gè)分布式爬蟲(chóng)框架。默認(rèn)提供單機(jī)版爬蟲(chóng)。 v1.2.2 新特性 1、系統(tǒng)底層重構(gòu),規(guī)范包名; 2、采集線(xiàn)程白名單過(guò)濾優(yōu)化,避免冗余失敗重試; 3、增強(qiáng)JS渲染方式采集能力,原生新提供 SeleniumPha...

    zhaofeihao 評(píng)論0 收藏0
  • XXL-CRAWLER v1.2.1 發(fā)布了

    摘要:版本新特性渲染支持渲染方式采集數(shù)據(jù),可參考爬蟲(chóng)示例抽象并設(shè)計(jì),方便自定義和擴(kuò)展頁(yè)面加載邏輯,如渲染等。默認(rèn)提供單機(jī)版爬蟲(chóng)。渲染通過(guò)擴(kuò)展模塊,支持采集動(dòng)態(tài)渲染數(shù)據(jù)。原生提供快速推薦和較慢渲染兩種實(shí)現(xiàn),支持自由擴(kuò)展其他實(shí)現(xiàn)。 版本新特性 1、JS渲染:支持JS渲染方式采集數(shù)據(jù),可參考 爬蟲(chóng)示例6; 2、抽象并設(shè)計(jì)PageLoader,方便自定義和擴(kuò)展頁(yè)面加載邏輯,如JS渲染等。底層提供 ...

    keithyau 評(píng)論0 收藏0
  • 小型編程項(xiàng)目有哪些值得推薦?這本神書(shū)寫(xiě)了 22 個(gè),個(gè)個(gè)了不得

    摘要:電子表格使用語(yǔ)言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創(chuàng)并首發(fā)于公眾號(hào)【Python貓】,未經(jīng)授權(quán),請(qǐng)勿轉(zhuǎn)載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...

    haitiancoder 評(píng)論0 收藏0
  • 小型編程項(xiàng)目有哪些值得推薦?這本神書(shū)寫(xiě)了 22 個(gè),個(gè)個(gè)了不得

    摘要:電子表格使用語(yǔ)言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創(chuàng)并首發(fā)于公眾號(hào)【Python貓】,未經(jīng)授權(quán),請(qǐng)勿轉(zhuǎn)載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...

    Bowman_han 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<