賀宗平 王正路
(1.南京審計大學信息化辦公室 江蘇省南京市 211815 2.江蘇師范大學信息化建設與管理處 江蘇省徐州市 221116)
互聯網文本數據采集能力是目前各種數據集成、應用系統關注的一項核心支撐能力,在各種系統開發中有著重要的作用。各種網站、web應用系統的文本數據的獲取方式存在一定規律性和相似性,網站文本數據的利用,諸如NLP相關研究的價值較高。因此,研究面向互聯網文本數據采集的框架具有重要的現實意義,并且能夠提供分布式、組件化和配置化的框架能力。
Scrapy是適用于Python的一個快速、高層次的屏幕抓取和Web抓取框架,用于抓取Web站點并從頁面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動化測試。Scrapy是一個適用爬取網站數據、提取結構性數據的應用程序框架,它可以應用在廣泛領域:Scrapy常應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。通常我們可以很簡單的通過Scrapy框架實現一個爬蟲,抓取指定網站的文字或圖片等內容。Scrapy架構示意圖如圖1所示。
Scrapy Engine框架核心:負責爬蟲采集器、采集流水線、分析下載器、調度器之間的信息交互、數據傳輸等;
Scheduler調度器:根據Scrapy Engine發送的Requests請求,按照需求排列進入隊列,當Scrapy Engine進行處理時,調度器將此請求轉交處理;
Downloader分析下載器:負責與Scrapy Engine所有Request請求進行分析過濾獲取,并將獲取到的Responses內容傳給Scrapy Engine,再轉交給Spider來處理;
Spider爬蟲:負責對所有Response內容的分析處理過濾,從其中提取處理數據,獲取指定字段所需要的數據,并將需要追蹤采集的URL提交框架,重新進入Scheduler調度器;
Item Pipeline采集流水線:負責處理Spider中獲取到指定字段數據,并進行分析、過濾、存儲等采集后期處理操作;
Downloader Middlewares下載中間件:一個可以自定義擴展下載功能的組件;
Spider Middlewares中間件:一個可以自定擴展和操作引擎和Spider中間通信的功能組件。
Requests:爬蟲引擎訪問互聯網網站內容的http請求;
Responses:http請求的返回內容,支持xpath、css、re等解析方式,以及處理語言文字格式等。
基于scrapy設計的文本數據采集框架應當具有以下幾種能力:
(1)框架組件輕量化,應用方便;
(1)支持海量數據的采集,具備數據定制化存儲、采集消息推送等功能;
(1)具備分鐘級別的定時調度采集能力,能夠對采集目標進行定時采集。
如圖2所示,框架具體由5個部分組成:
1.2.1 crawler采集引擎
crawler采集引擎是基于scrapy的可配置特征庫的爬蟲引擎,采集對象網頁的特征經過分析后被寫入元數據中,crawler根據開發人員配置的特征信息表數據和定時調度信息進行分析采集。
1.2.2 esoperation存儲組件
esoperation存儲組件是存儲crawler引擎采集的文本數據、元數據信息內容等,可根據開發和應用的需求進行定制存儲。
1.2.3 find檢索組件
find檢索組件是基于elasticsearch的高級檢索組件,具備支持按用戶自定義特征、時間、關鍵詞等維度進行組合聚合檢索。
1.2.4 analysis緩存組件

圖1:Scrapy架構示意圖

圖2:文本數據采集框架示意圖

圖3:常規式集成示意圖

圖4:配置式集成示意圖
analysis緩存組件是基于redis構建的高速緩存服務,為系統采集服務提供緩存和消息隊列服務。
1.2.5 notify消息組件
notify消息組件為高性能消息推送服務組件,可根據用戶需求在采集服務過程中集成進行消息定制推送等服務,例如支持企業微信的消息推送等。
(1)配置采集目標源的網頁特征數據表信息,配置采集任務的定時調度時間間隔;crawler引擎根據配置信息啟動采集任務;
(2)esoperation組件采集分析每一條文本信息,根據用戶自定義規則進行過濾并存儲持久化;
(3)采集分析過程中,根據自定義參數和配置,notify組件進行相關消息的推送和提示;
(4)集成和應用環節,通過find組件提供查詢API接口和服務,為系統提供多種豐富的組合查詢檢索功能;
(5)系統可配置采集中產生的高頻公共統計數據、文本數據的高速訪問服務。
定時采集調度是互聯網數據采集中基礎核心的功能,通過系統提供定時采集指定數據源頭的訪問能力。定時調度器包括以下幾個部分內容:
2.1.1 觸發器triggers
觸發器主要的是調度的邏輯,用于指定任務作業的運行依據和條件。包括了三種主要的trigger:第一種是date,即指定的系統后臺運行時間點觸發;第二種是interval,系統指定固定的時間間隔觸發運行;第三種是cron,按照Linux Crontab規范的時間周期性觸發運行。
2.1.2 任務儲存器job stores
主要用于存放任務,把運行任務的相關元信息數據存放在內存或數據庫中。
2.1.3 執行器executors
執行器主要是確保任務的并發執行可靠性,將多任務提交到線程池或進程池中運行,并任務完成的狀態信號通知給調度器。
2.1.4 調度器schedulers
調度器是整個定時采集調度的核心控制組件,將觸發器、任務存儲器、執行器在調度器中進行運行和關聯操作。
分布式采集是以可擴展集群滿足海量采集數據需求,本研究的分布式采集通過將任務分配和節點協同進行分布式采集。
2.2.1 任務分配
任務分配采用了可配置化目標采集地址,采集器為基于docker的獨立構建,可根據采集目標地址的情況進行集群化擴展配置,實現集群并發采集。
2.2.2 采集協同
采集任務的協同采取簡化機制設計,在采集地址元信息表中配置對應集群中的采集器,實現采集任務負載均衡。
(1)對于采集周期一致、需求相似,且需采集多個數據源項目的需求情況,支持將多個爬蟲采集器集成綜合為獨立插件,具有良好的復用和擴展性。
(2)支持采集過程的網頁關鍵標識標題和URL去重,對同站源的重復內容過濾,防止重復內容。在采集存儲環節,通過對同源網站的URL進行重復性檢索查詢,進而實現防止內容采集重復。
(1)系統基于全文檢索數據庫Elastic Search進行采集數據存儲,能夠對采集數據存儲字段進行靈活自定義配置,支持不同的系統任務采集字段差異化可靈活配置。
(2)向系統集成提供消息推送服務,具有穩定高性能的無阻塞異步消息隊列,以及可定制化的消息類型的服務,以SDK、API的方式支持適配微信、釘釘等移動端應用消息通信。
應用集成以組件形式為系統開發和應用的場景提供集成支持,一般應用于采集調度周期類似、需求近似,需要采集多個目標網站文本數據源的項目。
常規項目中的采集需求,通常是增加開發不同的爬蟲,這種方式開發量大,需要針對每一個網站都要進行定制化開發。如圖3所示。
本項目研究實現了可配置化的采集源配置,通過動態配置元數據信息即可以實現常規集成,無需額外開發工作量。將這些爬取目的地址集成為一個爬蟲,我們只需維護這一個集成中間件即可以,同時支持集群分布式采集,方便采集服務動態擴容。如圖4所示。
以某系統集成應用采集框架進行新聞文本數據采集為例。
(1)引用crawler引擎組件,采集網站特征參數,以人民日報、鳳凰網兩個網站采集為例:


crawler作為采集引擎核心組件,具備網站內容解析、采集調度等核心基礎功能,先期分析目標網站的特征參數,將特征參數傳遞給crawler的啟動參數,同時配置采集調度時間間隔。
(2)檢索查詢。

(3)消息推送。
以企業微信移動端應用作為推送終端為例。

通過設計面向互聯網文本數據的采集框架,實現了采集能力的高效集成和可管理配置化,能夠為各種系統應用場景提供豐富的采集能力,為NLP自然語言處理的相關的研究提供了豐富的研究語料和文本數據支撐,具有重要的支撐意義。