• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Scrapy的水利數(shù)據(jù)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)

      2020-07-09 21:53:20游攀利楊琳喻淼
      水利水電快報(bào) 2020年5期
      關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng)數(shù)據(jù)采集

      游攀利 楊琳 喻淼

      摘要:為解決目前各級(jí)水利部門(mén)數(shù)據(jù)共享能力弱、數(shù)據(jù)格式不統(tǒng)一的問(wèn)題,建立了一種水利數(shù)據(jù)整合方法。針對(duì)互聯(lián)網(wǎng)公開(kāi)的水利數(shù)據(jù)特點(diǎn),結(jié)合水利行業(yè)標(biāo)準(zhǔn)規(guī)范,介紹了基于Scrapy框架設(shè)計(jì)和開(kāi)發(fā)的水利數(shù)據(jù)爬蟲(chóng),并規(guī)范化存儲(chǔ)數(shù)據(jù)。在總結(jié)各種水利數(shù)據(jù)的獲取和解析原理及方法基礎(chǔ)上,提出了使用Scra-pyd部署爬蟲(chóng)和SpiderKeeper管理爬蟲(chóng)的方法,并成功應(yīng)用于長(zhǎng)江大數(shù)據(jù)中心的建設(shè),為水雨情預(yù)警、防汛抗旱、應(yīng)急管理提供了重要支持。

      關(guān)鍵詞:水利數(shù)據(jù);網(wǎng)絡(luò)爬蟲(chóng);Scrapy;數(shù)據(jù)采集

      中圖法分類(lèi)號(hào):TP391

      文獻(xiàn)標(biāo)志碼:A

      DOI:10. 15974/j .cnki.slsdkb.2020.05.014

      水利信息化經(jīng)過(guò)多年的發(fā)展,全國(guó)各水利廳局及流域機(jī)構(gòu)積累了大量的水利數(shù)據(jù),包括水雨情數(shù)據(jù)、水質(zhì)數(shù)據(jù)、水澇災(zāi)害數(shù)據(jù)、遙感數(shù)據(jù)、防汛抗旱知識(shí)和應(yīng)急管理知識(shí)等,這些數(shù)據(jù)可為防汛抗旱決策支持、水利工程建設(shè)、水文水資源研究等提供重要支持[1]。然而,水利數(shù)據(jù)分散在各水利機(jī)構(gòu)內(nèi),結(jié)構(gòu)復(fù)雜、種類(lèi)繁多,即便是同一種類(lèi)的業(yè)務(wù)數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)也有所差異,阻礙了水利數(shù)據(jù)的開(kāi)發(fā)、利用與研究。因此,本文從各水利政務(wù)網(wǎng)站的公開(kāi)數(shù)據(jù)人手,結(jié)合水利部發(fā)布的數(shù)據(jù)庫(kù)規(guī)范設(shè)計(jì)數(shù)據(jù)庫(kù)表,以水雨情數(shù)據(jù)為例,基于爬蟲(chóng)框架Scrapy設(shè)計(jì)和開(kāi)發(fā)水利爬蟲(chóng),著重介紹了各種水雨情網(wǎng)頁(yè)的獲取和解析過(guò)程,包括Scrapy Selector CSS選擇器解析HTML結(jié)構(gòu)數(shù)據(jù)、正則表達(dá)式解析JavaScript數(shù)據(jù)、獲取和解析Ajax數(shù)據(jù)、Selenium結(jié)合瀏覽器驅(qū)動(dòng)解析網(wǎng)頁(yè)加密數(shù)據(jù)等;并對(duì)爬取的數(shù)據(jù)進(jìn)行規(guī)范化存儲(chǔ),最后使用SpiderKeeper對(duì)分布于不同服務(wù)器的爬蟲(chóng)進(jìn)行統(tǒng)一管理。

      1 網(wǎng)絡(luò)爬蟲(chóng)

      網(wǎng)絡(luò)爬蟲(chóng)( web crawler),又稱(chēng)作網(wǎng)絡(luò)機(jī)器人(web robot)或網(wǎng)絡(luò)蜘蛛(web spider),是以一定的規(guī)則自動(dòng)抓取互聯(lián)網(wǎng)資源的計(jì)算機(jī)應(yīng)用程序[2]。網(wǎng)絡(luò)爬蟲(chóng)通常由調(diào)度器( scheduler)、下載器(download-er)、解析器(parser)、待爬行隊(duì)列(URL queue)4個(gè)部分組成,如圖1所示[3-4]。調(diào)度器首先將設(shè)定的初始URL傳遞給下載器,下載器從互聯(lián)網(wǎng)下載信息并傳給解析器,解析器根據(jù)既定規(guī)則提取信息和待爬取的URL,提取的信息經(jīng)處理后存人數(shù)據(jù)庫(kù)或文件,URL經(jīng)去重后傳輸給待爬行隊(duì)列.等待調(diào)度器調(diào)用,循環(huán)往復(fù)[5-7]。

      網(wǎng)絡(luò)爬蟲(chóng)分為通用( General Purpose)網(wǎng)絡(luò)爬蟲(chóng)和聚焦(Focused)網(wǎng)絡(luò)爬蟲(chóng)[8]。通用網(wǎng)絡(luò)爬蟲(chóng)又稱(chēng)作全網(wǎng)爬蟲(chóng),爬取整個(gè)互聯(lián)網(wǎng)資源以供搜索引擎建立索引;聚焦網(wǎng)絡(luò)爬蟲(chóng)又稱(chēng)作主題網(wǎng)絡(luò)爬蟲(chóng),爬取用戶需要的特定主題網(wǎng)頁(yè)(經(jīng)相關(guān)網(wǎng)站許可)收集數(shù)據(jù),并在標(biāo)注出處的前提下加以數(shù)據(jù)分析、用于建模及展示。水雨情爬蟲(chóng)為聚焦網(wǎng)絡(luò)爬蟲(chóng),目標(biāo)是爬取各級(jí)水利部門(mén)網(wǎng)站公開(kāi)的水雨情信息。

      網(wǎng)絡(luò)爬蟲(chóng)技術(shù)伴隨著搜索引擎共同發(fā)展,在網(wǎng)絡(luò)爬蟲(chóng)發(fā)展初期,開(kāi)發(fā)者需考慮很多底層功能的實(shí)現(xiàn),例如,模擬HTTP請(qǐng)求、下載網(wǎng)頁(yè)、解析數(shù)據(jù)、隊(duì)列管理等。搜索引擎面對(duì)的問(wèn)題日趨復(fù)雜,促使爬蟲(chóng)程序的編寫(xiě)難度越來(lái)越大。為了提高爬蟲(chóng)的編寫(xiě)效率,逐漸出現(xiàn)了網(wǎng)絡(luò)請(qǐng)求庫(kù)urllib、urllib2、re-quests等和解析庫(kù)Xpath、Beautiful Soup、pyquery等,進(jìn)而抽象出模塊的概念,有了爬蟲(chóng)框架的雛形。此時(shí),開(kāi)發(fā)者雖不需考慮這些常用模塊的實(shí)現(xiàn),但仍需考慮爬蟲(chóng)的流程、異常處理及任務(wù)調(diào)度等。對(duì)于今后進(jìn)一步出現(xiàn)的pyspider、scrapy等爬蟲(chóng)框架,開(kāi)發(fā)者只需考慮爬蟲(chóng)的業(yè)務(wù)邏輯部分。而且,pyspi-der、scrapy的可配置性更高,異常處理能力更強(qiáng),故水利數(shù)據(jù)采集系統(tǒng)采用scrapy作為爬蟲(chóng)框架。

      2 Scrapy框架

      Scrapy是使用Python語(yǔ)言實(shí)現(xiàn)的一種爬蟲(chóng)框架,它將網(wǎng)絡(luò)爬蟲(chóng)工程化、模塊化,幫助開(kāi)發(fā)人員方便地構(gòu)建網(wǎng)絡(luò)請(qǐng)求、解析網(wǎng)頁(yè)響應(yīng),從而快速實(shí)現(xiàn)特定業(yè)務(wù)的爬蟲(chóng)[8-9]。Scrapy基于Twisted異步網(wǎng)絡(luò)庫(kù)處理網(wǎng)絡(luò)通訊,實(shí)現(xiàn)了分布式爬取。

      2.1 Scrapy組件

      Scrapy爬蟲(chóng)框架結(jié)構(gòu)如圖2所示[10],包括以下6個(gè)主要組件:

      (1)Scrapy引擎(engine)。負(fù)責(zé)控制數(shù)據(jù)在組件中流動(dòng),并在相應(yīng)動(dòng)作發(fā)生時(shí)觸發(fā)事件,是整個(gè)框架的核心。

      (2)調(diào)度器。從Scrapy引擎接受請(qǐng)求,并將其加入到隊(duì)列中,以便之后請(qǐng)求它們時(shí)提供。

      (3)下載器。接受請(qǐng)求,負(fù)責(zé)獲取數(shù)據(jù)并提供給引擎,而后提供給爬蟲(chóng)。

      (4)爬蟲(chóng)。用戶編寫(xiě)的針對(duì)特定業(yè)務(wù)的爬蟲(chóng)程序,定義了初始請(qǐng)求網(wǎng)址、網(wǎng)頁(yè)的爬取邏輯和解析規(guī)則,用于發(fā)起初始請(qǐng)求和解析返回的數(shù)據(jù)并提取項(xiàng)目(Item,定義了爬取結(jié)果的數(shù)據(jù)結(jié)構(gòu),可對(duì)應(yīng)web開(kāi)發(fā)中的實(shí)體類(lèi))和生成新的請(qǐng)求,每個(gè)爬蟲(chóng)負(fù)責(zé)處理某個(gè)特定或一些網(wǎng)站。

      (5)項(xiàng)目管道(Item Pipeline)。負(fù)責(zé)處理爬蟲(chóng)提取出來(lái)的項(xiàng)目,典型的處理有數(shù)據(jù)清洗、驗(yàn)證數(shù)據(jù)完整性、數(shù)據(jù)重復(fù)及數(shù)據(jù)持久化(例如按指定格式保存到文件或存取到數(shù)據(jù)庫(kù)中)。

      (6)中間件(middleware)。包括下載器中間件( downloader middleware)和爬蟲(chóng)中間件(spider mid-dleware)。下載器中間件是在引擎與下載器之間的特定鉤子( specific hook),主要處理引擎發(fā)過(guò)來(lái)的請(qǐng)求,用戶可編寫(xiě)程序擴(kuò)展Scrapy的功能,以自定義的方式協(xié)調(diào)下載器的工作;爬蟲(chóng)中間件是在引擎與爬蟲(chóng)之間的特定鉤子,處理爬蟲(chóng)的輸入響應(yīng)(response)和輸出條目及請(qǐng)求。同下載器中間件一樣,用戶可擴(kuò)展Scrapy功能,以協(xié)調(diào)爬蟲(chóng)工作。

      2.2 Scrapy數(shù)據(jù)流

      Scrapy的數(shù)據(jù)流向是由引擎控制的,數(shù)據(jù)流動(dòng)的過(guò)程如下:

      (1)引擎找到處理該網(wǎng)站的爬蟲(chóng),向爬蟲(chóng)請(qǐng)求初始要爬取的URL,根據(jù)URL解析域名。

      (2)引擎從爬蟲(chóng)中獲取到第一個(gè)要爬取的URL,并通過(guò)調(diào)度器以請(qǐng)求的形式調(diào)度。

      (3)引擎向調(diào)度器請(qǐng)求下一個(gè)要爬取的URL。

      (4)調(diào)度器返回下一個(gè)要爬取的URL給引擎,引擎將URL通過(guò)下載器中間件轉(zhuǎn)發(fā)給下載器。

      (5)-旦頁(yè)面下載完畢,下載器生成該頁(yè)面的響應(yīng),并將其通過(guò)下載器中間件發(fā)送給引擎。

      (6)引擎從下載器處接收到響應(yīng),并通過(guò)爬蟲(chóng)中間件發(fā)送給爬蟲(chóng)處理。

      (7)爬蟲(chóng)處理響應(yīng),解析數(shù)據(jù)并封裝成條目,返回條目及新的請(qǐng)求給引擎。

      (8)引擎將爬蟲(chóng)返回的條目給項(xiàng)目管道處理,將新的請(qǐng)求加入到調(diào)度器的待爬隊(duì)列中。

      (9)重復(fù)步驟(2)~(8),直到調(diào)度器中沒(méi)有請(qǐng)求,待爬隊(duì)列為空,或者滿足自定義的停止條件,引擎則關(guān)閉該網(wǎng)站,爬行結(jié)束。

      通過(guò)多個(gè)組件的分工協(xié)作、組件對(duì)異步處理的支持,Scrapy充分利用了帶寬,提高了數(shù)據(jù)爬取效率。

      3 水雨情爬蟲(chóng)設(shè)計(jì)

      3.1 網(wǎng)頁(yè)獲取

      爬蟲(chóng)設(shè)計(jì)的首要工作即是得到獲取目標(biāo)數(shù)據(jù)的網(wǎng)絡(luò)請(qǐng)求。訪問(wèn)水雨情網(wǎng)頁(yè),查看網(wǎng)頁(yè)的源代碼會(huì)發(fā)現(xiàn),其中可能根本不存在水雨情數(shù)據(jù),這是因?yàn)楝F(xiàn)在很多網(wǎng)頁(yè)是由JavaScript渲染出來(lái),原始的HTML代碼可能只是一個(gè)僅有水雨情表頭的表格。向網(wǎng)站發(fā)送一個(gè)HTTP請(qǐng)求,返回的就是網(wǎng)頁(yè)源代碼。綜合分析各級(jí)水利部門(mén)網(wǎng)站公開(kāi)的水雨情網(wǎng)頁(yè),存在以下幾種情況。

      (1)網(wǎng)頁(yè)源代碼中的HTML代碼包含目標(biāo)數(shù)據(jù),該網(wǎng)頁(yè)的URL就是獲取目標(biāo)數(shù)據(jù)的URL;

      (2)網(wǎng)頁(yè)源代碼中的JavaScript代碼包含目標(biāo)數(shù)據(jù),該網(wǎng)頁(yè)的URL就是獲取目標(biāo)數(shù)據(jù)的URL;

      (3)網(wǎng)頁(yè)源代碼不包含目標(biāo)數(shù)據(jù),通過(guò)Ajax加載數(shù)據(jù)渲染網(wǎng)頁(yè),Ajax請(qǐng)求的URL即是獲取目標(biāo)數(shù)據(jù)的URL;

      (4)網(wǎng)頁(yè)源代碼不包含目標(biāo)數(shù)據(jù),通過(guò)JavaS-cript算法生成數(shù)據(jù)渲染網(wǎng)頁(yè),該網(wǎng)頁(yè)的URL即是獲取目標(biāo)數(shù)據(jù)的URL;

      (5)網(wǎng)頁(yè)源代碼不包含目標(biāo)數(shù)據(jù),網(wǎng)頁(yè)數(shù)據(jù)被加密,該網(wǎng)頁(yè)的URL即是獲取目標(biāo)數(shù)據(jù)的URL;

      (6)網(wǎng)頁(yè)源代碼不包含目標(biāo)數(shù)據(jù),而是使用if-rame嵌入另一個(gè)HTML網(wǎng)頁(yè)展示數(shù)據(jù),這種情況下,為了確認(rèn)獲取目標(biāo)數(shù)據(jù)的URL,需再次分析,以確定是上述(1)~(5)中的哪種情況。

      3.2 數(shù)據(jù)解析

      確定獲取目標(biāo)數(shù)據(jù)的URL之后,使用Scrapy模擬HTTP請(qǐng)求,對(duì)返回的響應(yīng)數(shù)據(jù)進(jìn)行解析。根據(jù)響應(yīng)的不同,解析方式也不同。對(duì)于3.1節(jié)中的情況(l),需要解析的是HTML結(jié)構(gòu)數(shù)據(jù),使用Scrapy的Selector CSS選擇器進(jìn)行解析;對(duì)于情況(2),由于JavaScript數(shù)據(jù)不是結(jié)構(gòu)化的,通常使用正則表達(dá)式進(jìn)行解析;對(duì)于情況(3),需要解析的是JSON數(shù)據(jù);對(duì)于情況(4)和(5),通常JavaScript的算法規(guī)律并不容易找到,即使找到,花費(fèi)的時(shí)間代價(jià)太大,若網(wǎng)頁(yè)數(shù)據(jù)加密,分析難度更大,所以這兩種情況通常采用Selenium或PhantomjS來(lái)驅(qū)動(dòng)瀏覽器加載網(wǎng)頁(yè),直接獲得JavaScript渲染后的網(wǎng)頁(yè),做到“可見(jiàn)即可爬”,接下來(lái)解析HTML結(jié)構(gòu)數(shù)據(jù)即可,與(1)的解析方式相同[11]。對(duì)于情況(6),iframe嵌入網(wǎng)頁(yè)的數(shù)據(jù)解析,只需分析iframe嵌入的網(wǎng)頁(yè)源代碼即可,后續(xù)步驟與(1)~(5)相同。具體的數(shù)據(jù)解析如下。

      (1)HTML結(jié)構(gòu)數(shù)據(jù)解析。以重慶水利水務(wù)網(wǎng)“水文管理”模塊下的“今日八時(shí)水情”(URL為http: //slj .cq.gov.cn/swxx/jrbssq/Pages/Default.aspx)為例,如圖3所示。查看源代碼,發(fā)現(xiàn)目標(biāo)數(shù)據(jù)已包含在HTML代碼結(jié)構(gòu)中,可利用CSS選擇器進(jìn)行解析。例如使用Scrapy shell提取寸灘和武隆水文站的水位數(shù)據(jù),可分別使用如下代碼進(jìn)行提取,如圖4所示。

      需要注意的是,由于代表站占據(jù)了第2行的第1列,所以寸灘的水位數(shù)據(jù)在第2行的第5列,而武隆的水位數(shù)據(jù)在第4行的第4列。

      (2)JavaScript數(shù)據(jù)解析。以長(zhǎng)江水文網(wǎng)的“實(shí)時(shí)水情”(http://www.cjh.com.cn/)為例,如圖5所示。分析網(wǎng)頁(yè)的源代碼,目標(biāo)數(shù)據(jù)是通過(guò)標(biāo)簽嵌入的URL(http://www.cjh.com.cn/sqindex.html)加載的,分析此HTML的源代碼,發(fā)現(xiàn)目標(biāo)數(shù)據(jù)包含在Ja-vaScript代碼中(見(jiàn)圖6),其作為一個(gè)JSON字符串賦值給了一個(gè)JS變量,這種情況使用正則表達(dá)式獲取目標(biāo)數(shù)據(jù)最為方便,如圖7所示。

      (3)Ajax數(shù)據(jù)解析。以湖北省水利廳網(wǎng)站的“水旱災(zāi)害防御”模塊的“江河水情”欄目(http://113.57.190.228: 8001/web/Report/RiverReport)為例,該欄目展示了湖北省56個(gè)河道水文站當(dāng)天08:00的水位、流量信息,如圖8所示。目標(biāo)是從表格中解析出實(shí)時(shí)數(shù)據(jù)(水位、流量)和防洪指標(biāo)數(shù)據(jù)(設(shè)防水位、警戒水位和歷史最高水位),查看江河水情網(wǎng)頁(yè)的源代碼發(fā)現(xiàn)表格中并沒(méi)有相關(guān)數(shù)據(jù)。打開(kāi)Chrome開(kāi)發(fā)工具.選擇Network選項(xiàng)卡,通過(guò)XHR篩選出Ajax請(qǐng)求,選定請(qǐng)求,點(diǎn)擊Headers可查看請(qǐng)求和響應(yīng)的頭部詳情。分析可知,請(qǐng)求類(lèi)型為GET,請(qǐng)求URL為http://113.57.190.228: 8001/Web/Report/GetRiverData? date=2019-11-11+08%3AOO,請(qǐng)求的參數(shù)只有1個(gè)date,參數(shù)值經(jīng)過(guò)了HTML URL編碼,表示的是ASCII字符“:”,所以真實(shí)的參數(shù)值為:2019-10-30 08:00。據(jù)此,可以使用Scrapy模擬Ajax請(qǐng)求,如需獲取歷史數(shù)據(jù),只需要按照一定規(guī)則改變date參數(shù)即可。點(diǎn)擊Preview可預(yù)覽返回的JSON數(shù)據(jù),如圖9所示,對(duì)照網(wǎng)頁(yè)數(shù)據(jù)可知每個(gè)字段的業(yè)務(wù)意義。

      (4)加密網(wǎng)頁(yè)數(shù)據(jù)解析。以江蘇水情信息(http://221.226.28.67:88/jsswxxSSI/Web/Default.ht-ml? m=2)為例,使用如圖10所示代碼即可獲取表格數(shù)據(jù)。后續(xù)使用HTML結(jié)構(gòu)數(shù)據(jù)解析方法即可,不再贅述。

      3.3 爬取對(duì)象定義

      Scrapy的條目類(lèi)用來(lái)定義爬取的對(duì)象。綜合分析各級(jí)水利部門(mén)網(wǎng)站公開(kāi)的河道水情信息,并結(jié)合水利部發(fā)布的SL323-2001《實(shí)時(shí)水雨情數(shù)據(jù)庫(kù)表結(jié)構(gòu)與標(biāo)識(shí)符》數(shù)據(jù)庫(kù)規(guī)范,對(duì)于河道水文站爬蟲(chóng),用StRiverltem定義爬取對(duì)象,需定義的屬性有:測(cè)站編碼、時(shí)間、測(cè)站名稱(chēng)、河流名稱(chēng)、水位、流量、設(shè)防水位、警戒水位、保證水位和歷史最高水位。

      3.4 數(shù)據(jù)存儲(chǔ)

      爬蟲(chóng)將解析的數(shù)據(jù)封裝成條目之后交給項(xiàng)目管道,進(jìn)行數(shù)據(jù)持久化。數(shù)據(jù)持久化的方式有多種,可直接本地化存儲(chǔ)為文件,如TXT、CSV、JSON等,也可保存至Oracle、MySQL等關(guān)系型數(shù)據(jù)庫(kù)或者M(jìn)ongoDB、Redis等非關(guān)系型數(shù)據(jù)庫(kù)。本文采用MySQL,根據(jù)爬蟲(chóng)對(duì)象StRiverltem設(shè)計(jì)河道水情數(shù)據(jù)表結(jié)構(gòu),如表1所示。

      爬取的數(shù)據(jù)保存至MySQL數(shù)據(jù)庫(kù),結(jié)果如圖11所示。

      3.5 異常處理

      爬蟲(chóng)執(zhí)行一段時(shí)間后,可能會(huì)出現(xiàn)“403 Forbid-den”的錯(cuò)誤,這是因?yàn)镮P訪問(wèn)頻率過(guò)高,網(wǎng)站采取了反爬措施,檢測(cè)到某個(gè)IP單位時(shí)間內(nèi)訪問(wèn)次數(shù)超過(guò)某個(gè)設(shè)定的閾值,就會(huì)拒絕服務(wù)。解決辦法包括使用代理和降低訪問(wèn)頻率,鑒于水利數(shù)據(jù)每天更新數(shù)量不多,可采用降低訪問(wèn)頻率辦法采集歷史數(shù)據(jù),在采集一個(gè)時(shí)間段的數(shù)據(jù)后,程序停頓1-2 s。如果采集的是實(shí)時(shí)數(shù)據(jù),水文網(wǎng)站每天更新的數(shù)據(jù)量并不多,通常不會(huì)出現(xiàn)訪問(wèn)頻率過(guò)高的問(wèn)題。

      網(wǎng)站反爬的措施還包括登錄、驗(yàn)證碼和返回動(dòng)態(tài)網(wǎng)頁(yè)等。水雨情等水利數(shù)據(jù)通常是公開(kāi)的,無(wú)需登陸和輸入驗(yàn)證碼即可訪問(wèn)。如果確有登錄和驗(yàn)證碼的要求,需在爬蟲(chóng)業(yè)務(wù)邏輯內(nèi)增加登陸模塊,并使用圖象識(shí)別或接入打碼平臺(tái)進(jìn)行驗(yàn)證碼識(shí)別,成功登陸后獲取cookies信息再對(duì)數(shù)據(jù)進(jìn)行處理。若服務(wù)器返回的是動(dòng)態(tài)網(wǎng)頁(yè),使用前述Selenium進(jìn)行處理,不再贅述。

      4 系統(tǒng)部署

      在完成Scrapy爬蟲(chóng)程序的編寫(xiě)和測(cè)試之后,將其部署在Scrapyd服務(wù)器中。Scrapyd是由Scrapy官方提供的用于部署Scrapy爬蟲(chóng)的服務(wù),用戶可通過(guò)它提供的HTTP JSON API控制爬蟲(chóng)。Scrapyd本身提供了一個(gè)簡(jiǎn)單的UI界面,用戶使用任何1臺(tái)能連接到Scrapyd服務(wù)器的計(jì)算機(jī)即可上傳、啟動(dòng)、停止爬蟲(chóng)并查看運(yùn)行日志,而不必登錄到Scrapyd服務(wù)器。但是,這個(gè)界面過(guò)于簡(jiǎn)單,且1臺(tái)Scrapyd服務(wù)器僅有1個(gè)界面,多臺(tái)即有多個(gè)界面,不能進(jìn)行統(tǒng)一管理。

      水利數(shù)據(jù)涉及主題非常多,對(duì)應(yīng)的爬蟲(chóng)數(shù)量很大。為了提高爬蟲(chóng)的性能,通常將不同業(yè)務(wù)的爬蟲(chóng)部署在不同的Scrapyd服務(wù)器上。為了實(shí)現(xiàn)對(duì)爬蟲(chóng)的統(tǒng)一管理,要使用SpiderKeeper和Scrapyweb,兩者均可實(shí)現(xiàn)一鍵部署和定時(shí)任務(wù),都是對(duì)Scrapyd提供的接口的二次封裝。SpiderKeeper是一款可擴(kuò)展的爬蟲(chóng)服務(wù)可視化管理工具,可快速向多個(gè)Scrapyd服務(wù)器部署爬蟲(chóng),監(jiān)控爬蟲(chóng)執(zhí)行情況,通過(guò)儀表盤(pán)管理爬蟲(chóng),并定制運(yùn)行策略。Scrapyweb比SpiderKeep-er功能更豐富(例如異常情況郵件通知),但穩(wěn)定性不及SpiderKeeper,SpiderKeeper可以應(yīng)付大規(guī)模的爬蟲(chóng)集群。本文采用SpiderKeeper對(duì)爬蟲(chóng)進(jìn)行統(tǒng)一管理。

      使用SpiderKeeper設(shè)置爬蟲(chóng)分兩步,首先創(chuàng)建一個(gè)條目,然后添加1個(gè)定時(shí)任務(wù),如圖12所示。1個(gè)爬蟲(chóng)對(duì)應(yīng)1個(gè)定時(shí)任務(wù),定時(shí)策略又根據(jù)業(yè)務(wù)數(shù)據(jù)的發(fā)布情況決定,如圖13所示。完成對(duì)所有爬蟲(chóng)的設(shè)置之后,可對(duì)爬蟲(chóng)進(jìn)行關(guān)閉、運(yùn)行一次和刪除操作,如圖14所示。

      5 結(jié)語(yǔ)

      本研究基于Scrapy的水利數(shù)據(jù)爬取,以水雨情為例,將各水利廳局及流域機(jī)構(gòu)公開(kāi)的水雨情數(shù)據(jù)解析分為HTML結(jié)構(gòu)數(shù)據(jù)、JavaScript數(shù)據(jù)、Ajax數(shù)據(jù)和加密數(shù)據(jù)4類(lèi)。詳細(xì)介紹了解析方法和原理,并將提取到的水雨情數(shù)據(jù)進(jìn)行規(guī)范化存儲(chǔ),可為水利一張圖和使用大數(shù)據(jù)方法研究水雨情預(yù)警、防汛抗旱、應(yīng)急管理提供數(shù)據(jù)支持。

      參考文獻(xiàn):

      [1] 張馳恒一.基于多數(shù)據(jù)源的水利數(shù)據(jù)獲取及大數(shù)據(jù)服務(wù)[D].西安:西安理工大學(xué),2018.

      [2]Castillo C.Effective web crawling[Jl. ACM SIGIR Fo- rum, 2005 .39(1): 55-56.

      [3]劉金紅,陸余良.主題網(wǎng)絡(luò)爬蟲(chóng)研究綜述[J].計(jì)算機(jī)應(yīng)用研究,2007,24(10):26-29.

      [4]周德懋,李舟軍.高性能網(wǎng)絡(luò)爬蟲(chóng):研究綜述[J].計(jì)算機(jī)科學(xué),2009,36(8):26-29.

      [5]于娟,劉強(qiáng).主題網(wǎng)絡(luò)爬蟲(chóng)研究綜述[J]計(jì)算機(jī)工程與科學(xué),2015,37(2):231-237.

      [6]Rungsawang A,Angkawattanawit N.Learnable Lopic-spe-cific web crawler[J].Journal of Network&Computer Ap-plications, 2005, 28(2): 97-114.

      [7] Kozanidis L.An Ontology-Based Focused Crawler[Cl//Intemational Conference on Natural Language and Infor-mation Systems: Applications of Natural Language to In-formation Systems. Springer-Verlag, 2008: 376-379.

      [8]李喬宇,尚明華,王富軍,等.基于Scrapy的農(nóng)業(yè)網(wǎng)絡(luò)數(shù)據(jù)爬取[J].山東農(nóng)業(yè)科學(xué)報(bào),2018,50(1):142-147.

      [9] 馬聯(lián)帥.基于Scrapy的分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2015.

      [10]

      Scrapy developers. Scrapy Architecture overview[DB/OL].

      https: //doc.scrapy.org/en/latest/topics/architecture. html, 2018。

      [11]杜彬.基于Selenium的定向網(wǎng)絡(luò)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)[J]金融科技時(shí)代,2016(7):35-39.

      (編輯:李慧)

      作者簡(jiǎn)介:游攀利,男,工程師,碩士,主要從水利信息化建設(shè)及軟件開(kāi)發(fā)工作。E-mail: youpanli@cjwsjy.com.cn

      猜你喜歡
      網(wǎng)絡(luò)爬蟲(chóng)數(shù)據(jù)采集
      煉鐵廠鐵量網(wǎng)頁(yè)數(shù)據(jù)獲取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      CS5463在植栽用電子鎮(zhèn)流器老化監(jiān)控系統(tǒng)中的應(yīng)用
      大數(shù)據(jù)時(shí)代高校數(shù)據(jù)管理的思考
      科技視界(2016年18期)2016-11-03 22:51:40
      鐵路客流時(shí)空分布研究綜述
      基于廣播模式的數(shù)據(jù)實(shí)時(shí)采集與處理系統(tǒng)
      軟件工程(2016年8期)2016-10-25 15:54:18
      通用Web表單數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      軟件工程(2016年8期)2016-10-25 15:52:53
      基于開(kāi)源系統(tǒng)的綜合業(yè)務(wù)數(shù)據(jù)采集系統(tǒng)的開(kāi)發(fā)研究
      基于社會(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)流量
      岱山县| 基隆市| 永仁县| 黄冈市| 广饶县| 咸阳市| 小金县| 酉阳| 京山县| 乌海市| 昌图县| 公主岭市| 仪征市| 巍山| 咸宁市| 肇庆市| 无极县| 浠水县| 昂仁县| 航空| 商水县| 乾安县| 呼玛县| 呈贡县| 南昌县| 乌审旗| 金溪县| 左云县| 志丹县| 平原县| 高州市| 遵义市| 阳朔县| 墨脱县| 金湖县| 金山区| 喜德县| 潮安县| 曲阜市| 从化市| 长汀县|