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

        ?

        基于Django 的分布式爬蟲框架設計與實現(xiàn)*

        2020-12-07 05:26:20劉建華
        計算機與數(shù)字工程 2020年10期
        關鍵詞:爬蟲隊列進程

        趙 宸 劉建華

        (西安郵電大學 西安 710121)

        1 引言

        網(wǎng)絡爬蟲[9]是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本,目前主流的爬蟲框架Nutch、Crawler4j、WebMagic、scrapy、WebCollector均沒有在運行的爬蟲中實時更新代碼并自動重新載入的功能,本文利用Django 框架[2]中自動重載機制,使用Python[6]語言開發(fā)了分布式[4~5]、多進程爬蟲框架[1],實現(xiàn)了可在運行的爬蟲中實時更新代碼并自動重新載入內(nèi)存執(zhí)行的功能,同時,根據(jù)下載過程中的斷點續(xù)傳[7]思想,使用Redis[3,16]開發(fā)了任務隊列技術,實現(xiàn)了重新載入爬蟲代碼后從斷點恢復任務狀態(tài)并繼續(xù)執(zhí)行后續(xù)任務的功能,并解決了重新載入后數(shù)據(jù)丟失問題。實驗表明,爬蟲框架可識別爬蟲代碼變化并重新載入到內(nèi)存運行,重新載入后不會丟失數(shù)據(jù),且相對其他分布式網(wǎng)絡爬蟲,性能提升了40.7%,節(jié)約了數(shù)據(jù)獲取成本。

        2 框架設計

        爬蟲框架基于Django框架開發(fā),由集中式的爬蟲服務和任務隊列以及分布式的爬蟲實例構(gòu)成,并利用了Django 框架的ORM[10]封裝了數(shù)據(jù)處理模塊。如圖1 所示,爬蟲服務將用戶初始任務存入任務隊列中,由分布式爬蟲實例中的爬蟲主進程獲取并分配給爬蟲子進程執(zhí)行與處理,所有爬蟲實例的結(jié)構(gòu)與內(nèi)容相同,保證了任務處理的負載均衡。

        爬蟲實例由爬蟲主進程、爬蟲子進程、任務模塊、數(shù)據(jù)處理模塊、抓取器、下載器、解析器、日志模塊和各站點爬蟲組成等組成,所有模塊均可調(diào)用日志模塊并輸出日志。爬蟲實例執(zhí)行任務流程使用偽代碼描述如下:

        圖1 爬蟲框架結(jié)構(gòu)圖

        3 系統(tǒng)實現(xiàn)

        3.1 可重載的爬蟲實例

        首先,Django框架的自動重載機制[11]實現(xiàn)原理是每隔1 秒根據(jù)每個文件的最后修改時間來判斷文件是否被修改,如果修改,則退出舊進程,啟動新進程執(zhí)行修改后的代碼。爬蟲實例的自動重載基于這一原理實現(xiàn),首先,將爬蟲框架的基本組件和爬蟲文件組織成Django 項目中的APP 包,如圖2 所示。然后,改寫Django 的命令行模塊,使原來的啟動站點服務的命令行功能變成執(zhí)行爬蟲主進程,并設置運行參數(shù)為“—reload”,從而將爬蟲框架和爬蟲代碼列入自動重載機制中,這樣更新爬蟲代碼時,Django 框架會通過重載重新執(zhí)行爬蟲主進程,從而執(zhí)行新的爬蟲代碼。

        圖2 爬蟲實例結(jié)構(gòu)

        3.2 任務隊列

        在分布式環(huán)境下,爬蟲主進程重新載入后,為了找回斷點以及防止正在執(zhí)行的任務丟失,本文利用Redis設計了爬蟲框架的任務隊列系統(tǒng)。

        如圖3 所示,除了“任務隊列”,還設計了“本地正在執(zhí)行的任務隊列”。爬蟲主進程將調(diào)度成功的任務同步寫入“本地正在執(zhí)行的任務隊列”,發(fā)生爬蟲主進程重載時,會重新執(zhí)行“本地正在執(zhí)行的任務隊列”中的任務,當爬蟲子進程完成任務后會從該隊列中刪除任務。同時,為了保證重新載入過程中不對數(shù)據(jù)讀寫產(chǎn)生影響,框架中對Redis 和數(shù)據(jù)庫的操作兼具備原子性[12],使用管道技術讀寫Re?dis 以及封裝數(shù)據(jù)庫讀寫都保證了重新載入時的操作回滾。

        圖3 Redis任務隊列

        初始任務在寫入任務隊列時,由框架分配唯一ID,爬蟲由此任務不斷產(chǎn)生的新任務共用這個ID,在分布式環(huán)境中,爬蟲主進程判斷一個任務完成的標志由式(1)計算得出,其中,NR為此ID 任務剩余數(shù)量,NA為新任務數(shù)量,每個分布式爬蟲實例新增一個任務,即增1,NF為已完成的任務數(shù)量,在爬蟲子進程釋放資源時設置,NE為出錯的任務數(shù)量,判斷此ID 任務完成的條件為:NR=0。例如,完成初始任務后,產(chǎn)生一個新任務,則在釋放資源前對NA進行加一操作,此時NR為1>0。在完成非初始任務的這個任務后,如果又產(chǎn)生2 個新任務,則在釋放資源前先經(jīng)行NF增1 操作,并對NR進行增2 操作,此時NR為2>0。當完成新產(chǎn)生的2 個任務且未產(chǎn)生新任務時,做NF增2 操作,此時NR為0,可判斷任務結(jié)束。

        4 框架測試與分析

        4.1 自動重載測試

        測試目的:測試分布式爬蟲實例在運行過程中更新代碼,是否可以自動重新載入且不丟失數(shù)據(jù)。

        測試環(huán)境:在內(nèi)網(wǎng)IP 末尾分別為239 和240 兩臺Linux 服務器[13]上部署爬蟲實例,在239 服務器上部署爬蟲服務和任務隊列。

        測試方法:發(fā)送4個相同的爬蟲任務,在240節(jié)點爬蟲實例運行過程中,多次使用git[14~15]將添加了空格的爬蟲代碼從代碼倉庫直接同步到本地,測試爬蟲實例自動重新載入的情況。

        測試結(jié)果:如圖4 所示,代碼發(fā)生變化后,運行中的爬蟲實例實現(xiàn)了自動重新載入。由圖5 可知,在分布式環(huán)境中,4 個相同的任務在有爬蟲節(jié)點重載的情況下,最終獲取的數(shù)據(jù)數(shù)量相同。

        圖4 爬蟲重載測試

        圖5 爬蟲重載測試結(jié)果

        結(jié)論:運行中的爬蟲實例可在代碼更新后實現(xiàn)自動重新載入,并且任意時刻的重新載入不會對數(shù)據(jù)結(jié)果產(chǎn)生影響。

        4.2 爬蟲性能測試

        測試目的:測試爬蟲獲取數(shù)據(jù)的速度,并與已有分布式爬蟲對比。

        測試環(huán)境:為保證對比測試環(huán)境統(tǒng)一,調(diào)整測試環(huán)境:Cpu核心數(shù)為12個,網(wǎng)絡1Gbps,內(nèi)存8G。

        測試方法:運行鏈家二手房爬蟲,發(fā)送“上海市”關鍵詞為初始任務,爬取上海市鏈家站點的全部二手房掛牌房源信息,每條房源數(shù)據(jù)需分別請求詳細頁和過去看房次數(shù)頁面。

        測試結(jié)果:圖6 中方框分別對應第一條數(shù)據(jù)和最后一條數(shù)據(jù)的入庫時間,由此可見,框架中的爬蟲在約77min左右的時間內(nèi)獲取了54256條房源信息,平均1 秒11.725 條數(shù)據(jù),即下載速度約為23.451(URL/s),平均單進程單頁面耗時1.023s。

        結(jié)論:相比其他分布式網(wǎng)絡爬蟲[8]同等測試環(huán)境下的16.666(URL/s)下載速度,該框架下的爬蟲下載速度提升了(23.451-16.666)/16.666=40.7%的性能。

        圖6 上海鏈家二手房數(shù)據(jù)

        5 結(jié)語

        該爬蟲框架是一個多進程、分布式的爬蟲框架,借助Django 框架特性,具有隨時更新爬蟲代碼后自動重新載入的功能,并且重新載入過程中不會丟數(shù)據(jù),可使用腳本批量更新集群中的爬蟲代碼,使得爬蟲的開發(fā)和維護變的十分方便,同時相較其他分布式爬蟲方案,本文框架可提升爬蟲40.7%的性能,降低了數(shù)據(jù)獲取成本。

        猜你喜歡
        爬蟲隊列進程
        利用網(wǎng)絡爬蟲技術驗證房地產(chǎn)灰犀牛之說
        基于Python的網(wǎng)絡爬蟲和反爬蟲技術研究
        隊列里的小秘密
        基于多隊列切換的SDN擁塞控制*
        軟件(2020年3期)2020-04-20 00:58:44
        債券市場對外開放的進程與展望
        中國外匯(2019年20期)2019-11-25 09:54:58
        在隊列里
        利用爬蟲技術的Geo-Gnutel la VANET流量采集
        電子測試(2018年1期)2018-04-18 11:53:04
        豐田加速駛?cè)胱詣玉{駛隊列
        基于Heritrix的主題爬蟲在互聯(lián)網(wǎng)輿情系統(tǒng)中應用
        社會進程中的新聞學探尋
        民主與科學(2014年3期)2014-02-28 11:23:03
        亚洲中文字幕无码不卡电影| 无码人妻久久一区二区三区免费 | 成人免费看www网址入口| 亚洲AV无码精品蜜桃| 无码人妻丰满熟妇区免费| 国产免费人成视频在线观看| 国产午夜免费一区二区三区视频 | 国产女在线| 一区二区av日韩免费| 国产激情在线观看免费视频| 日韩人妻无码一区二区三区久久| 人妻被黑人粗大的猛烈进出 | 天堂视频在线观看一二区| 国产特级毛片aaaaaa| 成人激情四射网| 午夜精品一区二区三区视频免费看| 久久九九精品国产av| 免费人妻无码不卡中文字幕18禁| 亚洲a∨天堂男人无码| 玖玖资源网站最新网站| 国内自拍情侣露脸高清在线| 国产97在线 | 中文| 一本大道久久东京热无码av| 在线观看日本一区二区三区| 亚洲国产精品无码久久一线| 精品国内自产拍在线观看| 色系免费一区二区三区| 亚洲天堂av高清在线| 天天夜碰日日摸日日澡性色av| 无码国产激情在线观看| 黑人巨大亚洲一区二区久| 91日韩东京热中文字幕| 久久久久波多野结衣高潮| 亚洲AV无码一区二区二三区我| 中文字幕乱码在线婷婷| 国产精品成熟老女人| 97精品伊人久久大香线蕉| 亚洲一二三四五区中文字幕| 日本伊人精品一区二区三区| 婷婷五月六月综合缴情| 久久99热精品免费观看欧美|