孟軍,覃???,劉潔,甘宇健
分布式網(wǎng)絡(luò)爬蟲設(shè)計(jì)研究
孟軍1,覃海奎2,劉潔2,甘宇健1
(1.廣西財(cái)經(jīng)學(xué)院電子商務(wù)系,南寧 530000;2.廣西財(cái)經(jīng)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,南寧 530000)
隨著大數(shù)據(jù)相關(guān)技術(shù)的不斷發(fā)展,數(shù)據(jù)的重要性越來越大,如何低成本第獲取大量數(shù)據(jù)是一個(gè)值得研究的問題。通過網(wǎng)絡(luò)爬蟲采集數(shù)據(jù)是一個(gè)方便且成本較低的網(wǎng)絡(luò)數(shù)據(jù)獲取手段,而為了獲取更多的數(shù)據(jù),單機(jī)運(yùn)行網(wǎng)絡(luò)爬蟲顯然是不夠的。因此,研究分布式網(wǎng)絡(luò)爬蟲軟件,提出一個(gè)可行且成本較低的實(shí)現(xiàn)方案。
網(wǎng)絡(luò)爬蟲;大數(shù)據(jù);分布式
網(wǎng)絡(luò)爬蟲又被稱為網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人,更經(jīng)常的稱為網(wǎng)頁追逐者,是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本[2]。數(shù)據(jù)爬蟲可以在網(wǎng)頁之間不斷的蠕動獲取特定的需要的信息,并將它整理收集保存至用戶指定的存儲介質(zhì)。傳統(tǒng)垂直網(wǎng)頁爬蟲常常是單機(jī)版的,且操作復(fù)雜,需要編寫爬蟲腳本。而大多的企業(yè)更是自己開發(fā)爬蟲程序,這就花費(fèi)了大量的時(shí)間和資源。能力有限的個(gè)人用戶更是無法完成獨(dú)立完成爬蟲程序的編寫。經(jīng)過大量的研究分析,編寫一個(gè)易用的、高效的網(wǎng)絡(luò)爬蟲程序,使沒有編程基礎(chǔ)能力的普通用戶可快速使用,使企業(yè)用戶可快速使用或可深度定制使用的網(wǎng)絡(luò)爬蟲程序是符合當(dāng)前市場需要的。
1.1 系統(tǒng)功能設(shè)計(jì)
數(shù)據(jù)抓取是網(wǎng)絡(luò)數(shù)據(jù)爬蟲的基礎(chǔ)也是核心功能,因此保證數(shù)據(jù)抓取的高效、可靠尤為重要。分布式是目前使用的較多的保證軟件系統(tǒng)高效可靠運(yùn)行的系統(tǒng)架構(gòu)之一。軟件的目標(biāo)實(shí)現(xiàn)當(dāng)用戶安裝部署好分布式爬蟲系統(tǒng)后,只需編寫簡單的邏輯腳本①腳本是使用一種特定的描述性語言,依據(jù)一定的格式編寫的可執(zhí)行文件,又稱作宏或批處理文件。代碼即可完成數(shù)據(jù)抓取工作。對于擁有現(xiàn)成腳本的用戶,只需要通過客戶端運(yùn)行腳本即可,客戶端會自動將腳本上傳到主服務(wù)器,由主服務(wù)器自動完成任務(wù)調(diào)度。因此用戶可以專注于數(shù)據(jù)抓取腳本的邏輯實(shí)現(xiàn)而分布式、數(shù)據(jù)庫操作等都由爬蟲系統(tǒng)完成。
1.2 數(shù)據(jù)抓取功能
數(shù)據(jù)抓取功能可以幫助用戶抓取用戶所需的數(shù)據(jù),例如抓取某一個(gè)或者多個(gè)網(wǎng)站的新聞數(shù)據(jù)、抓取博客網(wǎng)站數(shù)據(jù)等[3]。在這個(gè)模塊下,抓取數(shù)據(jù)需要用戶自行編寫簡單的爬蟲腳本代碼以適應(yīng)不同的網(wǎng)站數(shù)據(jù)格式。用戶腳本代碼使用Python語言編寫,系統(tǒng)提供自動編碼功能(即用戶通過點(diǎn)擊菜單輸入需要的數(shù)據(jù)便可完成簡單腳本代碼)。用戶定義好抓取規(guī)則后,由系統(tǒng)完成數(shù)據(jù)的抓取、解析、存儲等任務(wù)。
1.3 分布式運(yùn)行功能
在處理大數(shù)據(jù)時(shí),分布式運(yùn)行往往都能比單機(jī)運(yùn)行快,對數(shù)據(jù)抓取操作也一樣。為了更高效抓取數(shù)據(jù),系統(tǒng)需要提供分布式功能。但是,分布式的程序也比單機(jī)程序要復(fù)雜很多。為了簡單易用且高效數(shù)據(jù)抓取,系統(tǒng)實(shí)現(xiàn)不需要用戶“操心”的分布式運(yùn)行功能;用戶完成抓取腳本后,系統(tǒng)自動將腳本中的任務(wù)拆分,讓多臺電腦同時(shí)進(jìn)行數(shù)據(jù)抓取工作。
1.4 系統(tǒng)關(guān)鍵模塊設(shè)計(jì)
爬蟲系統(tǒng)使用了C#加Python的兩種語言完成。C#語言強(qiáng)項(xiàng)是編寫Windows桌面應(yīng)用程序,系統(tǒng)使用C#語言完成界面、網(wǎng)絡(luò)通信、分布式、數(shù)據(jù)庫操作等功能模塊。Python擁有多個(gè)開源且免費(fèi)的關(guān)于數(shù)據(jù)抓取的開源程序,利用這些程序庫開源很方便實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)抓取模塊。此外Python常被稱為膠水語言,能夠把用其他語言制作的各種模塊聯(lián)結(jié)在一起,這為與C#結(jié)合提供了便利。系統(tǒng)關(guān)鍵模塊共有三個(gè),分別為任務(wù)調(diào)度模塊、爬蟲模塊和用戶腳本模塊,其中系統(tǒng)模塊結(jié)構(gòu)如圖1所示。
圖1 關(guān)鍵模塊結(jié)構(gòu)圖
(1)任務(wù)調(diào)度器
任務(wù)調(diào)度器只運(yùn)行在Server主機(jī),由管理器、隊(duì)列維護(hù)器和數(shù)據(jù)同步器三個(gè)組件組成。
管理器是Server主機(jī)管理Client主機(jī)的組件。管理器負(fù)責(zé)啟動、暫停、關(guān)閉Client主機(jī)的任務(wù)。當(dāng)用戶使用管理器管理任務(wù)時(shí),任務(wù)管理器會向Client主機(jī)發(fā)送相應(yīng)指令,通過遠(yuǎn)程過程調(diào)用協(xié)議管理Client主機(jī)任務(wù),讓用戶管理Client主機(jī)任務(wù)就像管理本地任務(wù)一樣輕松便捷。當(dāng)任務(wù)全部執(zhí)行完畢后,自動暫停所有Client主機(jī)。此外,這個(gè)組件還提供定時(shí)管理、多用戶腳本管理等功能。
隊(duì)列維護(hù)器全稱任務(wù)URL②URL:對可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址(Uniform Resource Lo?cator)隊(duì)列維護(hù)器,是每一次數(shù)據(jù)爬取任務(wù)中需要從頁面上爬取數(shù)據(jù)的網(wǎng)頁URL隊(duì)列,維護(hù)器負(fù)責(zé)對該URL隊(duì)列的增刪改查。在爬取數(shù)據(jù)過程中,維護(hù)器會將未爬URL發(fā)送給各個(gè)電腦上的爬蟲完成數(shù)據(jù)爬取工作。當(dāng)爬蟲完成一個(gè)URL的任務(wù)后,會通知維護(hù)器并開始準(zhǔn)備接受新的任務(wù)。
數(shù)據(jù)同步器是分布式高可靠的保障。為保障分布式系統(tǒng)的高可靠性,分布式系統(tǒng)在啟動時(shí),系統(tǒng)中的Server主機(jī)會隨機(jī)從眾多的Client主機(jī)中挑選一臺備份Server主機(jī)(注:其原本的Client工作照常執(zhí)行),同時(shí)啟動其備份進(jìn)程。數(shù)據(jù)同步器組件中有心跳機(jī)制,每次心跳都會與備份服務(wù)器同步數(shù)據(jù)。如果備份進(jìn)程發(fā)現(xiàn)Server主機(jī)長時(shí)間沒進(jìn)行備份操作且無法聯(lián)系上Server主機(jī)后,自己將變成Server主機(jī),并通知其他Client,同時(shí)挑選新的備份Server。
(2)爬蟲引擎
爬蟲引擎采用Python語言編寫,引用了三個(gè)開源的第三方軟件:BeautifulSoup③Beautiful Soup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫、Selenium④Selenium也是一個(gè)用于Web應(yīng)用程序測試的工具,可直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣、Twisted⑤Twisted是一個(gè)用Python語言寫的事件驅(qū)動的網(wǎng)絡(luò)框架。通過這三個(gè)第三方軟件可以很方便的編寫需要的爬蟲引擎,實(shí)現(xiàn)流程為Selenium負(fù)責(zé)操作瀏覽器和頁面源碼下載,BeautifulSoup負(fù)責(zé)源碼解析和數(shù)據(jù)提取,Twisted則負(fù)責(zé)內(nèi)部過程調(diào)度。Selenium可以很方便的訪問網(wǎng)頁,將頁面源碼下載下來,并且提供操作JavaScript和操作頁面元素的功能。BeautifulSoup則可以很方便的解析網(wǎng)站源碼,可以簡便快捷的定位頁面元素。Twist?ed是一個(gè)單線程事件驅(qū)動引擎,當(dāng)用戶運(yùn)用selenium下載或操作頁面元素時(shí),twisted可以以單線程事件驅(qū)動模式調(diào)度selenium,而無需運(yùn)用多線程加鎖模式,從而減少系統(tǒng)資源占用。
(3)用戶腳本模塊
本模塊由C#編寫完成,提供一個(gè)人性化交互界面讓用戶完成數(shù)據(jù)爬取腳本。模塊提供腳本的生成、編寫、修改功能。由于用戶腳本采用Python語言完成,對于不懂編程的用戶,模塊提供簡單易操作的界面,使得用戶可以很方便地生成腳本。例如,當(dāng)用戶需要循環(huán)運(yùn)行時(shí),只需要輸入循環(huán)的開始和結(jié)束,系統(tǒng)就能自動生成循環(huán)代碼。對于學(xué)習(xí)過Python的用戶,軟件提供良好的編碼環(huán)境,如:語法著色、輸入提示等功能。
當(dāng)用戶腳本完成后,模塊會自動檢查腳本正確性。當(dāng)檢查通過,用戶便可運(yùn)行腳本。運(yùn)行腳本時(shí),用戶腳本會傳遞到爬蟲引擎,爬蟲引擎通過InronPython⑥InronPython是一種可以讓C#中運(yùn)行Python腳本的第三方.NET庫庫提供的函數(shù)運(yùn)行用戶的Python腳本,從而開始進(jìn)行數(shù)據(jù)抓取。
(4)系統(tǒng)測試
分布式網(wǎng)絡(luò)爬蟲程序測試
軟件測試環(huán)境如下:操作系統(tǒng):Windows 10家庭版、CPU:E3-1231-v3 3.4Ghz、內(nèi)存:16GB、網(wǎng)絡(luò)帶寬:100Mb。
在考慮了計(jì)算機(jī)的硬件配置和系統(tǒng)效率等因素后,測試分成:單機(jī)版,分布式(2、3臺服務(wù)器)等不同情況進(jìn)行,測試運(yùn)行為對某電商網(wǎng)站數(shù)據(jù)進(jìn)行爬取,測試結(jié)果如下:
表1
由結(jié)果可以看出分布式爬蟲的數(shù)據(jù)爬蟲速度較高,可以在短時(shí)間內(nèi)獲取大量的頁面數(shù)據(jù),滿足大多數(shù)場合應(yīng)用需要。隨著爬取服務(wù)器的增加,可以看到數(shù)據(jù)爬取速度的提升。
網(wǎng)絡(luò)爬蟲的主要性能指標(biāo)可以以頁面采集速度評價(jià)。軟件爬取效率提升計(jì)算公式如下:
本次測試分別測試運(yùn)行1小時(shí)后,分布式(2服務(wù)器)采集效率為8131頁面/小時(shí),分布式(3服務(wù)器)采集效率為11914頁面/小時(shí),單機(jī)版采集效率為4222頁面/小時(shí)。因此可以得出效率提升分別為2服務(wù)器效率
可見分布式網(wǎng)絡(luò)爬蟲效率隨著服務(wù)器增加呈現(xiàn)爬取速度呈現(xiàn)線性增長,滿足預(yù)期設(shè)計(jì)要求。
在信息爆炸的今天,互聯(lián)網(wǎng)的發(fā)展速度就如同爆炸一般席卷全球?;ヂ?lián)網(wǎng)中的信息正在以幾何倍數(shù)激增,搜索引擎能夠滿足用戶的信息查詢需求,卻不能滿足用戶的特殊需求,如:大量數(shù)據(jù)下載,特定格式數(shù)據(jù)抓取等[4]。文章提出了一種高效簡單的分布式網(wǎng)絡(luò)爬蟲結(jié)構(gòu),該結(jié)構(gòu)可以讓用戶只學(xué)習(xí)簡單的腳本語言就能完成數(shù)據(jù)抓取工作。但是,這也意味著用戶需要具有基本編程思維能力才能使用好本軟件。在以后的工作中將繼續(xù)朝著進(jìn)一步簡化用戶工作簡化用戶腳本生成的方向努力改進(jìn)。
[1]百度百科.大數(shù)據(jù)[EB/OL].http://baike.baidu.com/item/%E5%A4%A7%E6%95%B0%E6%8D%AE/1356941.2017.04.01.
[2]百度百科.網(wǎng)絡(luò)爬蟲[EB/OL].http://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB,2017.04.01.
[3]劉漢興,劉財(cái)興.主題爬蟲的搜索策略研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2008(12).
[4]高凱.搜索引擎中信息動態(tài)采集策略的研究[J].電子學(xué)報(bào),2007(10).
[5]蔣志剛,葉勇.Web搜索引擎.NET實(shí)現(xiàn)技術(shù)研究[J].計(jì)算機(jī)應(yīng)用與軟件,2007(10).
[6]丁烈云,趙剛.網(wǎng)絡(luò)文化安全及其監(jiān)管關(guān)鍵技術(shù)研究[J].信息網(wǎng)絡(luò)安全,2007(10).
[7]崔曉波.無數(shù)據(jù)不AI,無人工不智能[EB/OL].http://techcrunch.cn/2016/10/26/big-data-and-ai/,2017.04.01.
Design and Research of Distributed Web Crawler
MENG Jun1,QIN Hai-kui2,LIU Jie2,GAN Yu-jian1
(1.Department of Electronic Commerce,Guangxi University of Finance and Economics,Nannig 530000;2.Department of Computer Science,Guangxi University of Finance and Economics,Nannig 530000)
With the sustainable development of big data's related technology,how to get large amount of data at low cost becomes a question worthy of study.It is a convenient and low-cost way to collect network data by web crawlers.However,it is obviously insufficient to get more data through standalone network crawler.Therefore,studies the distributed web crawler software and puts forward a feasible and low-cost action program.
Data Network Crawler;Big Data;Distributed
1007-1423(2017)24-0062-04
10.3969/j.issn.1007-1423.2017.24.015
孟軍(1995-),男,廣西桂林,本科,學(xué)生,研究方向?yàn)閿?shù)據(jù)挖掘
覃???993-),男,廣西宜州,本科,學(xué)生,研究方向?yàn)閿?shù)據(jù)挖掘
劉潔(1997-),女,湖南婁底,本科,學(xué)生,研究方向?yàn)閿?shù)據(jù)爬蟲
甘宇?。?986-),男,廣西玉林人,碩士研究生,講師;研究方向?yàn)閿?shù)據(jù)挖掘,Email:47237862@qq.com
2017-05-25
2017-08-15