国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

網(wǎng)絡(luò)爬蟲實(shí)時(shí)控制器的設(shè)計(jì)與實(shí)現(xiàn)

2021-04-01 08:14:24李健張克亮
現(xiàn)代計(jì)算機(jī) 2021年5期
關(guān)鍵詞:爬蟲框架控制器

李健,張克亮

(信息工程大學(xué)洛陽(yáng)校區(qū),洛陽(yáng)471003)

0 引言

網(wǎng)絡(luò)爬蟲不僅作為搜索引擎的關(guān)鍵組件,而且在其他領(lǐng)域也有廣泛應(yīng)用[1]。借助網(wǎng)絡(luò)爬蟲,語(yǔ)言學(xué)家可以下載大量文本以研究語(yǔ)言現(xiàn)象,銷售人員可以搜集產(chǎn)品的價(jià)格和銷量以分析市場(chǎng)行情,領(lǐng)域愛(ài)好者能夠?qū)⒛硞€(gè)網(wǎng)站或欄目的內(nèi)容收藏到本地,AI研究者能夠采集各類數(shù)據(jù)作為機(jī)器學(xué)習(xí)的素材。

國(guó)內(nèi)外眾多機(jī)構(gòu)和個(gè)人開發(fā)了多款爬蟲工具軟件,如Nutch、Heritrix、SOUP、ParseHub、GooSeeker、八爪魚、火車頭等;常用的爬蟲框架包括WebCollector、Nutch、WebMagic、Heritrix、Scrapy和PySpider等[2-4]。這些爬蟲軟件和框架在很大程度上便利了人們對(duì)網(wǎng)絡(luò)數(shù)據(jù)的獲取,但還具有某些局限性:有的功能相對(duì)單一,使用方式受限,可定制化程度不夠;有的安裝配置繁瑣,框架結(jié)構(gòu)復(fù)雜,使用門檻較高;有的采用封閉式框架,不提供開源代碼,難以進(jìn)行二次開發(fā);有的抓取速度慢,解析和抽取能力弱,性能表現(xiàn)不佳??傊?,基于現(xiàn)有框架快速開發(fā)個(gè)性化爬蟲仍然具有一定難度。因此,為開發(fā)者提供一個(gè)輕量級(jí)、模塊化、免費(fèi)開源、高效易用的網(wǎng)絡(luò)爬蟲框架十分重要。

1 爬蟲框架設(shè)計(jì)

1.1 爬蟲工作原理

網(wǎng)絡(luò)爬蟲(Web Crawler)是按照一定規(guī)則自動(dòng)獲取Web信息資源的計(jì)算機(jī)程序[5]。“爬蟲”是一種形象的比喻,有時(shí)也被稱為網(wǎng)絡(luò)蜘蛛(Web Spider)或網(wǎng)絡(luò)機(jī)器人(Web Robot)。網(wǎng)絡(luò)爬蟲主要是面向Web的,這是由Web資源的開放性和豐富性所決定的。網(wǎng)絡(luò)爬蟲通常會(huì)對(duì)Web原始數(shù)據(jù)進(jìn)行二次抽取,以提高目標(biāo)數(shù)據(jù)的結(jié)構(gòu)化程度和價(jià)值密度。爬蟲的規(guī)則一方面是指爬蟲所采用的搜索策略(如深度優(yōu)先、廣度優(yōu)先等),另一方面是指爬蟲要遵循的行業(yè)規(guī)范(如Robot協(xié)議)。

根據(jù)數(shù)據(jù)采集的范圍和精度不同,網(wǎng)絡(luò)爬蟲可分為“漫爬型”和“垂直型”。前者用于搜索引擎的廣泛采集,也被稱通用爬蟲;后者用于領(lǐng)域數(shù)據(jù)的精準(zhǔn)采集,也被稱聚焦爬蟲。通用爬蟲對(duì)網(wǎng)頁(yè)中所有超鏈接進(jìn)行無(wú)差別搜索,得到一棵完整的生成樹;聚焦爬蟲則按照一定條件進(jìn)行篩選,得到一棵被剪枝的生成樹。聚焦爬蟲面向特定主題和應(yīng)用,是行業(yè)人員獲取領(lǐng)域數(shù)據(jù)的重要工具,也是文本關(guān)注的對(duì)象。網(wǎng)絡(luò)爬蟲的必要技術(shù)包括:Web訪問(wèn)、信息抽取、數(shù)據(jù)存儲(chǔ)、爬蟲控制等,其基本工作流程如圖1所示。

圖1爬蟲基本工作流程

首先將種子URL放入任務(wù)隊(duì)列,然后循環(huán)檢測(cè)隊(duì)列是否為空,若不為空則取出下一個(gè)URL進(jìn)行數(shù)據(jù)下載,若為空則結(jié)束爬蟲任務(wù)。Web資源下載完成后,對(duì)其進(jìn)行目標(biāo)數(shù)據(jù)抽取和擴(kuò)展鏈接過(guò)濾,目標(biāo)數(shù)據(jù)存入存儲(chǔ)系統(tǒng),擴(kuò)展鏈接添加到任務(wù)隊(duì)列。在URL不斷出列的同時(shí)又有新的URL補(bǔ)充進(jìn)來(lái),這樣就實(shí)現(xiàn)了自動(dòng)采集。為了避免重復(fù)采集,我們通常借助一個(gè)Visited數(shù)組來(lái)記錄那些已被訪問(wèn)的URL。

1.2 框架總體結(jié)構(gòu)

面向個(gè)性化需求的輕量級(jí)爬蟲框架應(yīng)當(dāng)采用模塊化設(shè)計(jì),能夠下載各類網(wǎng)絡(luò)資源,并支持異步下載、編碼檢測(cè)、提交表單、壓縮傳輸、使用代理等機(jī)制;能夠解析和抽取HTML、XML、JSON等多種數(shù)據(jù);能夠提供靈活的爬蟲控制方式,內(nèi)置常用搜索算法;能夠管理和分配線程資源和代理資源,支持分布式部署。根據(jù)上述需求,我們?cè)O(shè)計(jì)了如圖2所示的爬蟲框架,主要組件包括:控制器、下載器、解析器、線程池、代理池等、分布式部署器和智能化工具包。

圖2輕量級(jí)爬蟲框架

框架中的“智能化工具包”通過(guò)人機(jī)交互技術(shù)實(shí)現(xiàn)可視化模板配置,使用戶不必掌握Web專業(yè)知識(shí)就能完成模板配置,從而降低爬蟲使用門檻[6]。通過(guò)智能抽取技術(shù)實(shí)現(xiàn)對(duì)網(wǎng)頁(yè)內(nèi)容(如正文、日期、目錄等)的自動(dòng)抽取,進(jìn)一步減少配置工作量。通過(guò)主題模型計(jì)算網(wǎng)頁(yè)內(nèi)容的相關(guān)度,從而提高主題爬蟲的采集精度[7]。

1.3 框架應(yīng)用模式

通常情況下,框架中的控制器、解析器、下載器為必選組件,其余為可選組件,用戶可根據(jù)需要進(jìn)行組裝。爬蟲框架的基本應(yīng)用模式如圖3所示。

圖3爬蟲框架應(yīng)用模式

引用爬蟲框架后,開發(fā)者只需幾行代碼即可完成對(duì)簡(jiǎn)單任務(wù)的爬取;對(duì)于較復(fù)雜的任務(wù),亦可通過(guò)參數(shù)化定制或二次開發(fā)來(lái)實(shí)現(xiàn)。當(dāng)需要規(guī)劃新的爬蟲路線時(shí),開發(fā)者通常只須重寫控制器的相關(guān)方法,從而最大程度復(fù)用框架功能。

2 簡(jiǎn)單爬蟲控制器

2.1 控制器設(shè)計(jì)

作為爬蟲框架的核心部件,控制器的設(shè)計(jì)尤其重要。它對(duì)外提供操作接口,對(duì)內(nèi)控制整個(gè)爬蟲的運(yùn)行過(guò)程。簡(jiǎn)單爬蟲控制器的組成結(jié)構(gòu)如圖4所示。

圖4簡(jiǎn)單爬蟲控制器

爬蟲控制器的具體功能包括:①提供數(shù)據(jù)接口:接

收用戶輸入的種子URL,并將結(jié)果返回;②控制爬行路線:按照一定策略(深度優(yōu)先、廣度優(yōu)先等)進(jìn)行網(wǎng)頁(yè)爬??;③維護(hù)訪問(wèn)列表:對(duì)于已經(jīng)訪問(wèn)過(guò)的URL不再重復(fù)訪問(wèn);④設(shè)置過(guò)濾條件:對(duì)于擴(kuò)展URL進(jìn)行條件過(guò)濾;⑤控制任務(wù)總量:設(shè)置最大采集數(shù)量、最大搜索層數(shù)等。

2.2控制器實(shí)現(xiàn)

上述代碼通過(guò)實(shí)現(xiàn)了對(duì)“洛陽(yáng)政府網(wǎng)站”的站內(nèi)爬取:首先,創(chuàng)建一個(gè)BFSController對(duì)象;其次,限定最大采集任務(wù)量為100個(gè)頁(yè)面;再次,通過(guò)設(shè)置URL過(guò)濾器要求擴(kuò)展鏈接中必須包含“l(fā)y.gov.cn”字符串,從而保證“站內(nèi)搜索”;最后,將網(wǎng)站首頁(yè)(http://www.ly.gov.cn/)作為起始種子開啟爬蟲任務(wù)。執(zhí)行上述代碼,運(yùn)行結(jié)果如圖5所示。

圖5爬蟲運(yùn)行結(jié)果

3 實(shí)時(shí)爬蟲控制器

此前的爬蟲控制器要等任務(wù)全部完成后才能返回結(jié)果,這并不符合實(shí)際需求。由于爬蟲在開放的網(wǎng)絡(luò)環(huán)境中運(yùn)行,任何意外情況都可能發(fā)生,例如斷網(wǎng)、停電、死機(jī)、誤操作、服務(wù)器故障等。若爬蟲程序在結(jié)果返回之前就異常退出或無(wú)法繼續(xù)運(yùn)行,那么此前的工作也就變成徒勞。當(dāng)采集任務(wù)量很大時(shí),即使采集過(guò)程沒(méi)有遇到異常情況,爬蟲控制器也不可能一次性返回所有結(jié)果,這就需要對(duì)下載內(nèi)容進(jìn)行實(shí)時(shí)保存。

3.1 控制器設(shè)計(jì)

根據(jù)上述分析,我們對(duì)控制器提出以下改進(jìn):①采集結(jié)果不再等任務(wù)全部完成后一并返回,而是每下載一個(gè)任務(wù)就觸發(fā)回調(diào)機(jī)制(回調(diào)方法由用戶指定,可進(jìn)行實(shí)時(shí)保存或進(jìn)一步抽?。?。②可以保存當(dāng)前任務(wù)場(chǎng)景(Save),也可以從已保存的場(chǎng)景中恢復(fù)任務(wù)并繼續(xù)執(zhí)行(Restore)。③由用戶設(shè)置一個(gè)自動(dòng)保存數(shù)量(M),爬蟲每采集M個(gè)任務(wù)就自動(dòng)保存一次任務(wù)場(chǎng)景;即使有異常情況發(fā)生,需要重新下載的任務(wù)最多也不會(huì)超過(guò)M個(gè)。改進(jìn)后的爬蟲控制器具有一定的實(shí)時(shí)處理能力,我們稱之為“實(shí)時(shí)爬蟲控制器”(如圖6所示)。

圖6實(shí)時(shí)爬蟲控制器

3.2 控制器實(shí)現(xiàn)

圖7爬蟲任務(wù)存放目錄

4 結(jié)語(yǔ)

筆者在項(xiàng)目實(shí)踐中發(fā)現(xiàn):Web新技術(shù)層出不窮,網(wǎng)頁(yè)結(jié)構(gòu)千差萬(wàn)別,業(yè)務(wù)數(shù)據(jù)多種多樣,采集目標(biāo)各不相同。面對(duì)個(gè)性化的數(shù)據(jù)采集需求,沒(méi)有哪一款網(wǎng)絡(luò)爬蟲能包打天下。在已有爬蟲框架的基礎(chǔ)上進(jìn)行二次開發(fā),是一種高效可行的方法。實(shí)驗(yàn)結(jié)果表明:本文所提出的輕量級(jí)爬蟲框架是功能完備的,所設(shè)計(jì)的實(shí)時(shí)爬蟲控制器是高效易用的。在控制器的實(shí)現(xiàn)過(guò)程中也涉及到了下載器和解析器,但由于篇幅所限文中未能詳細(xì)介紹。若需要完整的實(shí)現(xiàn)代碼,可通過(guò)電子郵箱聯(lián)系作者。

猜你喜歡
爬蟲框架控制器
利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說(shuō)
框架
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
廣義框架的不相交性
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
電子制作(2017年9期)2017-04-17 03:00:46
WTO框架下
法大研究生(2017年1期)2017-04-10 08:55:06
一種基于OpenStack的云應(yīng)用開發(fā)框架
模糊PID控制器設(shè)計(jì)及MATLAB仿真
MOXA RTU控制器ioPAC 5542系列
巴青县| 玉树县| 澄江县| 长葛市| 雷州市| 西充县| 南投市| 屏东市| 独山县| 扶余县| 汨罗市| 麻栗坡县| 博兴县| 兰考县| 洞口县| 禹州市| 蓬莱市| 团风县| 安陆市| 古田县| 垣曲县| 涞水县| 伽师县| 泾阳县| 忻城县| 上饶市| 广河县| 蛟河市| 彭山县| 浑源县| 绥中县| 思南县| 大丰市| 宁南县| 若羌县| 神池县| 临沭县| 鲁山县| 临海市| 兖州市| 华安县|