亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Crawler4j和Quartz的分布式爬蟲(chóng)系統(tǒng)

        2020-05-11 12:01:11劉曉東林鳳德朱文歡
        科技創(chuàng)新與應(yīng)用 2020年13期
        關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng)分布式

        劉曉東 林鳳德 朱文歡

        摘? 要:網(wǎng)絡(luò)爬蟲(chóng)是實(shí)現(xiàn)數(shù)據(jù)分析的重要基礎(chǔ),通過(guò)網(wǎng)絡(luò)爬蟲(chóng)可實(shí)現(xiàn)對(duì)數(shù)據(jù)的獲取。針對(duì)爬蟲(chóng)的渠道廣、數(shù)量多且雜、單點(diǎn)效率低的問(wèn)題,引入了輕量級(jí)的多線程爬蟲(chóng)框架Crawler4j和分布式定時(shí)任務(wù)調(diào)度框架Quartz,文章主要基于這兩個(gè)框架來(lái)搭建穩(wěn)定、高效的分布式爬蟲(chóng)系統(tǒng)。

        關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng);分布式;Crawler4j;Quartz

        Abstract: Web crawler is an important foundation of data analysis, through which data can be acquired. Aiming at the problem of crawler's wide channel, large number and miscellaneous, and low efficiency of single point, the lightweight multi-threaded crawler framework Crawler4j and the distributed timed task scheduling framework Quartz are introduced. This paper mainly builds a stable and efficient distributed crawler system based on these two frameworks.

        網(wǎng)絡(luò)爬蟲(chóng)(Web Crawler)是指按照特定的方式,自動(dòng)獲取網(wǎng)絡(luò)中大量數(shù)據(jù)(包括結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù),以及非結(jié)構(gòu)化數(shù)據(jù))的程序或者腳本。在大數(shù)據(jù)時(shí)代,數(shù)據(jù)就是財(cái)富,得數(shù)據(jù)者得天下,所以作為獲取網(wǎng)絡(luò)數(shù)據(jù)的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)將越來(lái)越受到重視。網(wǎng)絡(luò)爬蟲(chóng)技術(shù)不僅涉及到網(wǎng)絡(luò)知識(shí)、網(wǎng)頁(yè)前后端知識(shí),而且還包含各種輔助工具,是個(gè)綜合的技術(shù)[1]。本文通過(guò)開(kāi)源框架Crawler4j[2]和Quartz[3]來(lái)構(gòu)建定時(shí)循環(huán)、穩(wěn)定、快速的多線程分布式爬蟲(chóng)系統(tǒng),最終實(shí)現(xiàn)爬蟲(chóng)的高效數(shù)據(jù)采集功能。

        2 技術(shù)選型

        2.1 Quartz中集成Crawler4j

        Crawler4j是一款基于Java的輕量級(jí)單機(jī)開(kāi)源爬蟲(chóng)框架[2],該框架的特點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單、速度快、容易上手,同時(shí)該框架支持多線程、過(guò)濾重復(fù)url、垂直獲取數(shù)據(jù)等功能。在使用Crawler4j框架時(shí),需要關(guān)注兩個(gè)重要的類(lèi),一個(gè)類(lèi)是:WebCrawler類(lèi),它負(fù)責(zé)匹配url規(guī)則、解析html頁(yè)面和提取所需數(shù)據(jù);另外一個(gè)類(lèi)為:Controller類(lèi),它用來(lái)控制爬蟲(chóng)的各種狀態(tài)。對(duì)于Crawler4j的配置,需要根據(jù)不同的爬蟲(chóng)任務(wù)來(lái)進(jìn)行定制化設(shè)計(jì),如setMaxDepthOfCrawling()[2]就是配置最大深度,setMaxPagesToFetch()[2]就是頁(yè)面抓取的最大數(shù)量,對(duì)于不同的配置,需要查看官方文檔[2]。

        Quartz是任務(wù)調(diào)度領(lǐng)域的一個(gè)開(kāi)源項(xiàng)目[3],其最大的特點(diǎn)是擁有豐富的功能,它可以用來(lái)創(chuàng)建或者運(yùn)行少則幾個(gè),多則十個(gè)、百個(gè)、甚至幾萬(wàn)個(gè)復(fù)雜任務(wù)。Quartz框架中定時(shí)任務(wù)部分是在Job類(lèi)的void execute(JobExecutionContextcontext)[3]方法中執(zhí)行,如果想要集成Crawler4j爬蟲(chóng)框架,只需在execute()方法中構(gòu)造Crawler4j配置及啟動(dòng)對(duì)應(yīng)配置爬蟲(chóng)線程,這樣就能夠?qū)崿F(xiàn)定時(shí)爬蟲(chóng)任務(wù)了。啟動(dòng)爬蟲(chóng)任務(wù)后,用Crawler4j自帶的解析特性來(lái)解析對(duì)應(yīng)url返回的頁(yè)面。但是這種方法不是通用的,所以對(duì)于一些特殊頁(yè)面還需要采取自定義解析類(lèi)來(lái)解析。

        2.2 分布式實(shí)現(xiàn)原理

        需要獲取的數(shù)據(jù)來(lái)源渠道眾多,有門(mén)戶(hù)網(wǎng)站、快訊、自媒體等等。各渠道的數(shù)據(jù)結(jié)構(gòu)也不統(tǒng)一,這樣便導(dǎo)致每一個(gè)任務(wù)都很個(gè)性化,需要做定制化處理來(lái)滿足需求。依托Quartz不僅可以實(shí)現(xiàn)成百上千個(gè)任務(wù)的運(yùn)行和管理,而且每一個(gè)任務(wù)都可以做定制化處理[4]。單個(gè)節(jié)點(diǎn)運(yùn)行眾多任務(wù)的時(shí)候,存在著運(yùn)行效率低、獲取數(shù)據(jù)不及時(shí)、無(wú)法高可用等問(wèn)題。通過(guò)引入分布式系統(tǒng)可以有效地提高系統(tǒng)的整體運(yùn)行效率,同時(shí)解決高可用問(wèn)題,保證系統(tǒng)的穩(wěn)定運(yùn)行。

        在集群中,每個(gè)節(jié)點(diǎn)能和數(shù)據(jù)庫(kù)組成一個(gè)獨(dú)立且完整的應(yīng)用。Quartz通過(guò)數(shù)據(jù)庫(kù)來(lái)調(diào)度當(dāng)前節(jié)點(diǎn)與其他節(jié)點(diǎn)進(jìn)行協(xié)作,每個(gè)節(jié)點(diǎn)的啟動(dòng)或停止是相互獨(dú)立的行為,它們之間沒(méi)有任何通信。Quartz集群在同一個(gè)數(shù)據(jù)庫(kù)下,由數(shù)據(jù)庫(kù)中保存狀態(tài)來(lái)判斷調(diào)度任務(wù)是否正在執(zhí)行,并且其他節(jié)點(diǎn)不能執(zhí)行正在執(zhí)行中的任務(wù),這樣就保證了該任務(wù)的實(shí)例在集群中是單實(shí)例運(yùn)行的,并且集群中分配任務(wù)是按照負(fù)載均衡策略來(lái)進(jìn)行[5,6]。當(dāng)任務(wù)在其中一個(gè)節(jié)點(diǎn)中運(yùn)行失敗,數(shù)據(jù)庫(kù)中會(huì)有狀態(tài)的記錄,并且馬上重新分配到另外一個(gè)節(jié)點(diǎn)中啟動(dòng)運(yùn)行,這樣便保證了任務(wù)的高可用性。

        3 分布式爬蟲(chóng)系統(tǒng)

        3.1 分布式系統(tǒng)搭建

        搭建基于Quartz的集群,首先要建立數(shù)據(jù)庫(kù)表結(jié)構(gòu)。運(yùn)行官方網(wǎng)站docs/dbTables[3]路徑下的腳本文件,在mysql中創(chuàng)建對(duì)應(yīng)的11張表,如圖1所示,它是實(shí)現(xiàn)集群的基礎(chǔ)。

        其次需要編寫(xiě)Quartz對(duì)應(yīng)的配置文件,可以在quartz.properties配置,也可以把配置文件寫(xiě)到對(duì)應(yīng)的configuration中。在配置中特別需要注意isClustered 必須設(shè)置為T(mén)rue,否則不能實(shí)現(xiàn)分布式集群。

        最后就是定義實(shí)現(xiàn)Job接口的爬蟲(chóng)任務(wù)類(lèi),配置Crawler4j,把對(duì)應(yīng)的配置放在數(shù)據(jù)庫(kù)中。如圖2所示,當(dāng)任務(wù)啟動(dòng)時(shí)就去數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)任務(wù)Crawler4j配置,添加到Crawler4j的框架中。用SpringBoot來(lái)集成Quartz,啟動(dòng)SpringBoot就能實(shí)現(xiàn)對(duì)應(yīng)的定時(shí)任務(wù)。

        3.2 定制化任務(wù)實(shí)現(xiàn)

        為了滿足定制化任務(wù)[7]的需要,以及實(shí)現(xiàn)管理端對(duì)爬蟲(chóng)任務(wù)的管理和監(jiān)控,在數(shù)據(jù)庫(kù)表中設(shè)計(jì)了t_crawler_task(任務(wù))表和t_sched_card(令牌)表。利用這兩張表可以實(shí)現(xiàn)對(duì)任務(wù)的增刪改查,同時(shí)滿足對(duì)任務(wù)的定制化,比如需要對(duì)定時(shí)實(shí)現(xiàn)定制化,只需在cron字段填上定制化的時(shí)間就能實(shí)現(xiàn)定時(shí)任務(wù)的定制化。

        Quartz實(shí)現(xiàn)定時(shí)調(diào)度系統(tǒng)是將任務(wù)開(kāi)發(fā)和任務(wù)調(diào)度進(jìn)行分離[6]。開(kāi)發(fā)人員不需要考慮任務(wù)的調(diào)度問(wèn)題,只需要考慮任務(wù)需要爬取什么數(shù)據(jù),然后實(shí)現(xiàn)Job接口即可。任務(wù)調(diào)度可以根據(jù)任務(wù)自身的情況進(jìn)行設(shè)置,可以在爬蟲(chóng)管理系統(tǒng)中配置,也可以直接配置在數(shù)據(jù)庫(kù)中。當(dāng)SpringBoot容器啟動(dòng)后,系統(tǒng)自動(dòng)檢測(cè)所有實(shí)現(xiàn)Job接口的類(lèi),并將其初始化為實(shí)例,在初始化過(guò)程中,系統(tǒng)會(huì)讀取每個(gè)Job任務(wù)已經(jīng)設(shè)置好的調(diào)度信息,而后根據(jù)配置好的調(diào)度信息進(jìn)行有序調(diào)度[7]。

        4 結(jié)束語(yǔ)

        本文通過(guò)Crawler4j和Quartz來(lái)搭建分布式定時(shí)爬蟲(chóng)系統(tǒng),分布式節(jié)點(diǎn)數(shù)量理論上不受限制,且每個(gè)節(jié)點(diǎn)中的代碼、配置和部署都一模一樣。在集群中任務(wù)的數(shù)目可以成百上千,同時(shí)每一個(gè)任務(wù)可以在Crawler4j中配置多線程,從而大大提高了爬蟲(chóng)的效率。目前實(shí)現(xiàn)的分布式系統(tǒng)穩(wěn)定,超過(guò)半年沒(méi)有出現(xiàn)過(guò)宕機(jī)的情況,而且開(kāi)發(fā)簡(jiǎn)單,高效。

        當(dāng)然該分布式系統(tǒng)依然存在一些不足需要改進(jìn):

        (1)本系統(tǒng)還需要開(kāi)發(fā)爬蟲(chóng)管理系統(tǒng),用來(lái)監(jiān)控和管理爬蟲(chóng)任務(wù)。

        (2)爬蟲(chóng)系統(tǒng)需要設(shè)計(jì)更加通用的解析頁(yè)面方式,以便能夠快速地通過(guò)修改配置文件而不是重新修改對(duì)應(yīng)的代碼來(lái)解決眾多渠道改版所帶來(lái)的爬蟲(chóng)實(shí)現(xiàn)問(wèn)題。

        參考文獻(xiàn):

        [1]王敏.分布式網(wǎng)絡(luò)爬蟲(chóng)的研究與實(shí)現(xiàn)[D].東南大學(xué),2017.

        [2]https://github.com/yasserg/crawler4j[EB/OL].

        [3]http://www.quartz-scheduler.org/[EB/OL].

        [4]張康.基于Quartz的分布式定時(shí)任務(wù)調(diào)度模塊的設(shè)計(jì)與實(shí)現(xiàn)[D].南京大學(xué),2019.

        [5]段子飛.支持Ajax的Deep Web網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].華南理工大學(xué),2015.

        [6]魏麗娟.基于hadoop的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)研究[D].武漢理工大學(xué),2013.

        [7]于成龍,于洪波.網(wǎng)絡(luò)爬蟲(chóng)技術(shù)研究[J].東莞理工學(xué)院學(xué)報(bào),2011,18(3):25-29.

        猜你喜歡
        網(wǎng)絡(luò)爬蟲(chóng)分布式
        分布式光伏發(fā)展的四大矛盾
        能源(2017年7期)2018-01-19 05:05:03
        分布式光伏熱錢(qián)洶涌
        能源(2017年10期)2017-12-20 05:54:07
        基于預(yù)處理MUSIC算法的分布式陣列DOA估計(jì)
        分布式光伏:爆發(fā)還是徘徊
        能源(2017年5期)2017-07-06 09:25:54
        煉鐵廠鐵量網(wǎng)頁(yè)數(shù)據(jù)獲取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
        基于社會(huì)網(wǎng)絡(luò)分析的權(quán)威網(wǎng)頁(yè)挖掘研究
        主題搜索引擎中網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)研究
        淺析如何應(yīng)對(duì)網(wǎng)絡(luò)爬蟲(chóng)流量
        網(wǎng)絡(luò)爬蟲(chóng)針對(duì)“反爬”網(wǎng)站的爬取策略研究
        西門(mén)子 分布式I/O Simatic ET 200AL
        亚洲熟女综合色一区二区三区 | 一本一道波多野结衣av中文 | 中文人妻熟妇乱又伦精品| 品色堂永远的免费论坛| 亚洲AV无码成人精品区日韩密殿| 亚洲高清激情一区二区三区| 国产在线高清理伦片a| 日本aⅴ大伊香蕉精品视频| 成年女人A级毛片免| 久久精品成人一区二区三区蜜臀| 午夜免费观看日韩一级视频| 亚洲 自拍 另类小说综合图区 | 午夜无码一区二区三区在线| 亚洲国产丝袜美女在线| 人妻夜夜爽天天爽三区丁香花| 亚洲av蜜桃永久无码精品| 成人午夜免费无码视频在线观看 | 久久久亚洲免费视频网| 国产婷婷色一区二区三区在线| 亚洲综合一区无码精品| 一区二区三区不卡免费av| 成人国产精品三上悠亚久久| 无码va在线观看| 最新亚洲人成网站在线| 亚洲区一区二区三区四| 国产av在线观看久久| 黑人巨茎大战欧美白妇| 国产自产av一区二区三区性色| 美国黄色av一区二区| 精品国偷自产在线视频九色| 亚洲深深色噜噜狠狠爱网站| 久久久2019精品视频中文字幕| 经典三级免费看片天堂| 人妻夜夜爽天天爽三区麻豆av| 最新国产精品精品视频| 国产色第一区不卡高清| 开心激情网,开心五月天| 亚洲精品中文字幕乱码三区99| 中文字幕一区二区三区四区五区| 吃奶摸下的激烈视频| 99精品国产自产在线观看|