賀宗平 王正路
(1.南京審計大學信息化辦公室 江蘇省南京市 211815 2.江蘇師范大學信息化建設與管理處 江蘇省徐州市 221116)
互聯(lián)網(wǎng)文本數(shù)據(jù)采集能力是目前各種數(shù)據(jù)集成、應用系統(tǒng)關注的一項核心支撐能力,在各種系統(tǒng)開發(fā)中有著重要的作用。各種網(wǎng)站、web應用系統(tǒng)的文本數(shù)據(jù)的獲取方式存在一定規(guī)律性和相似性,網(wǎng)站文本數(shù)據(jù)的利用,諸如NLP相關研究的價值較高。因此,研究面向互聯(lián)網(wǎng)文本數(shù)據(jù)采集的框架具有重要的現(xiàn)實意義,并且能夠提供分布式、組件化和配置化的框架能力。
Scrapy是適用于Python的一個快速、高層次的屏幕抓取和Web抓取框架,用于抓取Web站點并從頁面中提取結構化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試。Scrapy是一個適用爬取網(wǎng)站數(shù)據(jù)、提取結構性數(shù)據(jù)的應用程序框架,它可以應用在廣泛領域:Scrapy常應用在包括數(shù)據(jù)挖掘,信息處理或存儲歷史數(shù)據(jù)等一系列的程序中。通常我們可以很簡單的通過Scrapy框架實現(xiàn)一個爬蟲,抓取指定網(wǎng)站的文字或圖片等內(nèi)容。Scrapy架構示意圖如圖1所示。
Scrapy Engine框架核心:負責爬蟲采集器、采集流水線、分析下載器、調(diào)度器之間的信息交互、數(shù)據(jù)傳輸?shù)龋?/p>
Scheduler調(diào)度器:根據(jù)Scrapy Engine發(fā)送的Requests請求,按照需求排列進入隊列,當Scrapy Engine進行處理時,調(diào)度器將此請求轉(zhuǎn)交處理;
Downloader分析下載器:負責與Scrapy Engine所有Request請求進行分析過濾獲取,并將獲取到的Responses內(nèi)容傳給Scrapy Engine,再轉(zhuǎn)交給Spider來處理;
Spider爬蟲:負責對所有Response內(nèi)容的分析處理過濾,從其中提取處理數(shù)據(jù),獲取指定字段所需要的數(shù)據(jù),并將需要追蹤采集的URL提交框架,重新進入Scheduler調(diào)度器;
Item Pipeline采集流水線:負責處理Spider中獲取到指定字段數(shù)據(jù),并進行分析、過濾、存儲等采集后期處理操作;
Downloader Middlewares下載中間件:一個可以自定義擴展下載功能的組件;
Spider Middlewares中間件:一個可以自定擴展和操作引擎和Spider中間通信的功能組件。
Requests:爬蟲引擎訪問互聯(lián)網(wǎng)網(wǎng)站內(nèi)容的http請求;
Responses:http請求的返回內(nèi)容,支持xpath、css、re等解析方式,以及處理語言文字格式等。
基于scrapy設計的文本數(shù)據(jù)采集框架應當具有以下幾種能力:
(1)框架組件輕量化,應用方便;
(1)支持海量數(shù)據(jù)的采集,具備數(shù)據(jù)定制化存儲、采集消息推送等功能;
(1)具備分鐘級別的定時調(diào)度采集能力,能夠?qū)Σ杉繕诉M行定時采集。
如圖2所示,框架具體由5個部分組成:
1.2.1 crawler采集引擎
crawler采集引擎是基于scrapy的可配置特征庫的爬蟲引擎,采集對象網(wǎng)頁的特征經(jīng)過分析后被寫入元數(shù)據(jù)中,crawler根據(jù)開發(fā)人員配置的特征信息表數(shù)據(jù)和定時調(diào)度信息進行分析采集。
1.2.2 esoperation存儲組件
esoperation存儲組件是存儲crawler引擎采集的文本數(shù)據(jù)、元數(shù)據(jù)信息內(nèi)容等,可根據(jù)開發(fā)和應用的需求進行定制存儲。
1.2.3 find檢索組件
find檢索組件是基于elasticsearch的高級檢索組件,具備支持按用戶自定義特征、時間、關鍵詞等維度進行組合聚合檢索。
1.2.4 analysis緩存組件
圖1:Scrapy架構示意圖
圖2:文本數(shù)據(jù)采集框架示意圖
圖3:常規(guī)式集成示意圖
圖4:配置式集成示意圖
analysis緩存組件是基于redis構建的高速緩存服務,為系統(tǒng)采集服務提供緩存和消息隊列服務。
1.2.5 notify消息組件
notify消息組件為高性能消息推送服務組件,可根據(jù)用戶需求在采集服務過程中集成進行消息定制推送等服務,例如支持企業(yè)微信的消息推送等。
(1)配置采集目標源的網(wǎng)頁特征數(shù)據(jù)表信息,配置采集任務的定時調(diào)度時間間隔;crawler引擎根據(jù)配置信息啟動采集任務;
(2)esoperation組件采集分析每一條文本信息,根據(jù)用戶自定義規(guī)則進行過濾并存儲持久化;
(3)采集分析過程中,根據(jù)自定義參數(shù)和配置,notify組件進行相關消息的推送和提示;
(4)集成和應用環(huán)節(jié),通過find組件提供查詢API接口和服務,為系統(tǒng)提供多種豐富的組合查詢檢索功能;
(5)系統(tǒng)可配置采集中產(chǎn)生的高頻公共統(tǒng)計數(shù)據(jù)、文本數(shù)據(jù)的高速訪問服務。
定時采集調(diào)度是互聯(lián)網(wǎng)數(shù)據(jù)采集中基礎核心的功能,通過系統(tǒng)提供定時采集指定數(shù)據(jù)源頭的訪問能力。定時調(diào)度器包括以下幾個部分內(nèi)容:
2.1.1 觸發(fā)器triggers
觸發(fā)器主要的是調(diào)度的邏輯,用于指定任務作業(yè)的運行依據(jù)和條件。包括了三種主要的trigger:第一種是date,即指定的系統(tǒng)后臺運行時間點觸發(fā);第二種是interval,系統(tǒng)指定固定的時間間隔觸發(fā)運行;第三種是cron,按照Linux Crontab規(guī)范的時間周期性觸發(fā)運行。
2.1.2 任務儲存器job stores
主要用于存放任務,把運行任務的相關元信息數(shù)據(jù)存放在內(nèi)存或數(shù)據(jù)庫中。
2.1.3 執(zhí)行器executors
執(zhí)行器主要是確保任務的并發(fā)執(zhí)行可靠性,將多任務提交到線程池或進程池中運行,并任務完成的狀態(tài)信號通知給調(diào)度器。
2.1.4 調(diào)度器schedulers
調(diào)度器是整個定時采集調(diào)度的核心控制組件,將觸發(fā)器、任務存儲器、執(zhí)行器在調(diào)度器中進行運行和關聯(lián)操作。
分布式采集是以可擴展集群滿足海量采集數(shù)據(jù)需求,本研究的分布式采集通過將任務分配和節(jié)點協(xié)同進行分布式采集。
2.2.1 任務分配
任務分配采用了可配置化目標采集地址,采集器為基于docker的獨立構建,可根據(jù)采集目標地址的情況進行集群化擴展配置,實現(xiàn)集群并發(fā)采集。
2.2.2 采集協(xié)同
采集任務的協(xié)同采取簡化機制設計,在采集地址元信息表中配置對應集群中的采集器,實現(xiàn)采集任務負載均衡。
(1)對于采集周期一致、需求相似,且需采集多個數(shù)據(jù)源項目的需求情況,支持將多個爬蟲采集器集成綜合為獨立插件,具有良好的復用和擴展性。
(2)支持采集過程的網(wǎng)頁關鍵標識標題和URL去重,對同站源的重復內(nèi)容過濾,防止重復內(nèi)容。在采集存儲環(huán)節(jié),通過對同源網(wǎng)站的URL進行重復性檢索查詢,進而實現(xiàn)防止內(nèi)容采集重復。
(1)系統(tǒng)基于全文檢索數(shù)據(jù)庫Elastic Search進行采集數(shù)據(jù)存儲,能夠?qū)Σ杉瘮?shù)據(jù)存儲字段進行靈活自定義配置,支持不同的系統(tǒng)任務采集字段差異化可靈活配置。
(2)向系統(tǒng)集成提供消息推送服務,具有穩(wěn)定高性能的無阻塞異步消息隊列,以及可定制化的消息類型的服務,以SDK、API的方式支持適配微信、釘釘?shù)纫苿佣藨孟⑼ㄐ拧?/p>
應用集成以組件形式為系統(tǒng)開發(fā)和應用的場景提供集成支持,一般應用于采集調(diào)度周期類似、需求近似,需要采集多個目標網(wǎng)站文本數(shù)據(jù)源的項目。
常規(guī)項目中的采集需求,通常是增加開發(fā)不同的爬蟲,這種方式開發(fā)量大,需要針對每一個網(wǎng)站都要進行定制化開發(fā)。如圖3所示。
本項目研究實現(xiàn)了可配置化的采集源配置,通過動態(tài)配置元數(shù)據(jù)信息即可以實現(xiàn)常規(guī)集成,無需額外開發(fā)工作量。將這些爬取目的地址集成為一個爬蟲,我們只需維護這一個集成中間件即可以,同時支持集群分布式采集,方便采集服務動態(tài)擴容。如圖4所示。
以某系統(tǒng)集成應用采集框架進行新聞文本數(shù)據(jù)采集為例。
(1)引用crawler引擎組件,采集網(wǎng)站特征參數(shù),以人民日報、鳳凰網(wǎng)兩個網(wǎng)站采集為例:
crawler作為采集引擎核心組件,具備網(wǎng)站內(nèi)容解析、采集調(diào)度等核心基礎功能,先期分析目標網(wǎng)站的特征參數(shù),將特征參數(shù)傳遞給crawler的啟動參數(shù),同時配置采集調(diào)度時間間隔。
(2)檢索查詢。
(3)消息推送。
以企業(yè)微信移動端應用作為推送終端為例。
通過設計面向互聯(lián)網(wǎng)文本數(shù)據(jù)的采集框架,實現(xiàn)了采集能力的高效集成和可管理配置化,能夠為各種系統(tǒng)應用場景提供豐富的采集能力,為NLP自然語言處理的相關的研究提供了豐富的研究語料和文本數(shù)據(jù)支撐,具有重要的支撐意義。