范順利 周亦敏
摘 要: 隨著網絡數據的迅速增長,網頁數據抓取在處理大量數據時遇到了一些挑戰,例如大量數據存儲,需要密集計算能力以及數據提取的可靠性。提出了一個基于云平臺的網頁數據抓取架構,該架構使用AWS(Amazon Web Services)作為云平臺,按需配置計算資源和數據存儲;Selenium作為網頁自動化工具,調用WebDriver API能夠模擬用戶使用瀏覽器。通過實驗,比較了該架構與其他基于云的網頁抓取架構的不同,并分析了它的優勢。
關鍵詞: AWS; 網頁抓取; 大數據; Selenium
中圖分類號:TP311.5 文獻標志碼:A 文章編號:1006-8228(2018)09-21-04
Abstract: With the rapid growth of data on the Internet, web scraping encounters a number of challenges in processing large amounts of data, such as large amounts of data storage, the need for intensive computing capabilities, and the reliability of data extraction. So, a web scraping architecture based on the cloud platform is proposed. The architecture uses AWS (Amazon Web Services) as the cloud platform and configures computing resources and data storage on demand. Selenium is a web page automation tool; the supported WebDriver API simulates the process of users using the browser. Through experiments, the differences between this architecture and other cloud-based web scraping architectures are compared, and its advantages are analyzed.
Key words: AWS; Web scraping; big data; Selenium
0 引言
互聯網提供了大量數據集, 但是很多數據都被嵌入到網頁結構與樣式中[1]。將可用的信息從網頁中提取出來,挖掘其潛在價值,使其在金融、數據分析以及其他科學領域發揮重要作用。目前現有的多數解決方案主要側重于網頁數據的采集,數據采集是與數據科學相關的任何研究和開發的初步工作,而這只是大數據的第一步。因此,對于數據科學領域,提取網頁數據并運用到數據科學領域十分重要。
網絡上的大多數信息都是以HTML文檔的形式呈現的,這些數據都是非結構化數據[2]。由于非結構化數據不遵循任何數據模型,因此信息提取并不容易。網頁數據提取的過程包括:網頁數據的解析、過濾、格式化結果和存儲。在分布式計算領域,處理大量的網頁抓取,可以使用BeautifulSoup,Requests和Scrapy[3]等各種庫,但是,它們只能在靜態頁面上工作。因此,選擇Selenium作為網頁自動化工具,Python的HTMLParser庫用于從HTML中提取數據[4]。使用Amazon Web Services的EC2(彈性計算云)作為云平臺,選擇EC2的原因在于其靈活性,可根據需要創建,啟動和終止EC2實例,以及對大數據應用程序的支持。
1 簡介
隨著軟件產業的發展,網頁數據采集也經歷了不同的發展階段,從最早期的人工復制整理數據,到如今的基于云計算的大數據采集,每一次產業技術的革新都伴隨著硬件和軟件的巨大進步和發展[5]。云計算通過高度密集的計算能力和支持彈性資源,使其成為個人企業以小資源開始自己的網頁抓取的最佳選擇。下面介紹一些基于云平臺的網頁抓取。
1.1 Import.io
Import.io是一個基于云平臺,在不編碼的情況下從不同網站抓取網頁,所有提取的數據都存儲在其云服務器上。它允許將數據下載為CSV,Excel,Google表格,JSON或通過API訪問。其獨特的功能包括自動數據和圖像提取,自動頁面鏈接、監控、調度和無需編碼。
1.2 WebScraper.io
WebScraper.io是另一種可視化網頁抓取平臺,它提供Web Scraper和Web Scraper Extension的兩種方式。對于Google Chrome瀏覽器,Web Scraper Extension工具可以免費使用,用戶可以創建一個sitemap,制定如何抓取。而對于基于云的Web Scraper,它的使用價格取決于要抓取的URL數量。
1.3 Scrapy
Scrapy是一個免費的開放源代碼和協作式網頁抓取框架,通過編寫代碼并調用API提取網頁數據。Scrapy是用Python編寫的,可以部署在Scrapy云中,可以按需擴展[6]。其特點是快速,簡單,可擴展等。
以上解決方案主要側重于網頁數據的采集,而這只是大數據的第一步。鑒于大數據的進一步處理,構建了基于云的網頁抓取框架(Cloud-Scraper)。
2 系統設計
2.1 Scraper介紹
圖1顯示了一個傳統的Scraper概況,客戶端向ScrapeHub提供URL以及網頁抓取配置。ScrapeHub程序啟動,處理和監視系統中的所有任務,它是用Python語言編寫的。然后ScrapeHub啟動Scrape Engine任務,Scrape Engine初始化一個網頁,使用Selenium庫將網頁轉化到所需狀態,使用Requests庫對其進行解析。不同的Scraper可能使用不同的庫來解析和初始化網頁。在這里,只提到了Selenium和Requests,所有數據都存儲在數據庫中。這個模型代表了傳統的順序抓取網頁數據的方法,一次只能抓取一個站點,只能在給定的時間段內提取有限的數據。通過添加更多的計算和存儲資源,可以消除這種限制,但隨著需求的增長,維護將變得非常昂貴和困難,所以這個方法不是很靈活適用。
2.2 Cloud-Scraper設計
使用Amazon彈性計算云(EC2),通過簡單隊列服務(SQS)和簡單存儲服務(S3)[7],可以解決上述問題。Amazon S3用于存儲Amazon機器映像,能夠根據需要創建盡可能多的EC2實例,具有經濟高效的靈活性。圖2說明了Cloud-Scraper的架構,該體系結構的前端是Web瀏覽器,通過REST API連接到Amazon Web Server。位于云端的ScrapeHub將處理所有客戶端的抓取請求以及處理和監控事件,使用Amazon SQS來維護要被抓取的URL列表。Amazon SQS處理兩個隊列;一個是請求隊列,另一個是響應隊列。Scrape Engine是一個以URL作為輸入并抓取網頁內容的程序,每個EC2實例都是運行Scrape Engine的虛擬機。DynamoDB是一款免費且開放源碼的NoSQL數據庫,可為提取的數據提供存儲[8]。
圖3顯示了Cloud-Scraper的網頁抓取流程,當用戶對Cloud-Scraper發送抓取請求時,請求會轉到ScrapeHub,該請求包含兩個信息:URL和抓取配置。首先,ScrapeHub將URL劃分為多個塊,并將它們轉發到S3存儲,同時創建多個EC2實例,以及創建SQS請求隊列和響應隊列。ScrapeHub在SQS請求隊列的幫助下向EC2實例發送服務請求,處理請求的順序以先進先出(FIFO)調度方式完成。ScrapeHub創建的請求隊列上的每個請求都有一個特定的ID,通過響應隊列持續監視整體抓取的進度,抓取結果存儲在DynamoDB中。
Amazon EMR(Amazon Elastic MapReduce)是一種Web服務[9],使用Hadoop處理方法,并結合Amazon EC2,能夠以高效率輕松處理大量數據。Cloud-Scraper集成了大數據應用程序,抓取的網頁數據能夠可視化分析。
3 實驗分析
圖4顯示了使用不同方案完成網頁抓取所需的時間,包括請求時間,排隊時間,處理時間和來自云端的響應時間,X軸表示URL的數量,而Y軸表示網頁抓取完成的時間。圖中上面的兩條線表示使用單個機器和使用單個機器上的多個線程的抓取完成時間,下面的兩條線表示使用20臺機器和使用20臺機器Amazon EC2的T2實例完成抓取所需的時間。可以看到,使用單節點本地機器,最多可以抓取4000個網頁數據,這是由于服務器限制單個IP在有限的時間內訪問有限的數據而導致的。在單個機器中執行并發線程也是一樣,盡管計算速度比順序節點快得多,但抓取效率隨著URL的增加而下降。下面的兩條線的抓取完成時間大致是線性的,表明隨著URL數量逐漸增加,Cloud-Scraper能夠正常運行。可以推斷出,Cloud-Scraper架構是可擴展的,并且可依據抓取的URL數量增加EC2實例。
許多基于云的網頁抓取解決方案都是可用的,但其中大部分都是商業的,其工作模式不是公開的。因此,與一些現有的開源框架進行比較,如Scrapy和Import.io。圖5顯示了使用一臺機器實例,Cloud-Scraper完成網頁抓取時間與其他基于云平臺的對比。與其他框架相比,Cloud-Scraper架構是分布式的,對可以使用的計算資源的實例沒有限制,在Amazon云中的DynamoDB的幫助下,可以靈活地使用所有資源。由于Selenium的使用可能會延遲一段時間,抓取完成時間比Import.io的抓取完成時間多,但它的缺點已被優勢所超越, Selenium提供了更高的可靠性,以及對人類行為的模仿效果更好[10]。在數據提取方面,其性能與目前市場上的其他基于云的網頁抓取架構相當,還可以與其他大數據應用結合使用,最終被抓取的數據將進入大數據處理。
4 Cloud-Scraper的優勢
Cloud-Scraper有很多優點。其中一些描述如下:
⑴ 成本效益:使用云資源按次付費模式,能夠以便宜的價格使用云資源,可以按需擴展或縮減,比維護自己的云更便宜[11]。云供應商幾乎可以提供從存儲到處理能力所需的一切,使得云計算更簡單。購買自有資源,維護和擴大需求的費用會很高。
⑵ 可擴展性:云供應商根據需要提供可靠的計算機,可以根據需要創建和使用這些機器的多個實例。供應商提供大量選擇平臺的選項,根據對計算的性能需求,可以選擇正確的處理能力[12]。
⑶ 大數據應用的集成:任何大數據應用都需要四個基礎架構——存儲,處理,分析軟件和網絡。DynamoDB是NoSQL數據庫,可提供更高的可用性,從而獲得更好的性能。分析軟件可以根據用戶的需求在此架構上編程,借助Amazon的EC2,可以在數量和計算能力上擴展。盡管這種架構并未完成所有大數據需求,但進一步的程序集成和修改可以使其對于大數據任務更加穩健。
5 結論
本文提出一種新的基于云平臺的網頁抓取架構,Amazon的云服務為分布式環境中的計算和存儲提供彈性資源,為網頁抓取提供了更好的平臺。通過實驗測試了該架構的可擴展性,并簡單地將它與其他網頁抓取架構進行了比較,分析其優點,包括Selenium的使用和對大數據應用程序的集成。此外,也可以使用其他云服務來實現上述架構。
參考文獻(References):
[1] 魏冬梅,何忠秀,唐建梅.基于Python的Web信息獲取方法研究[J].軟件導刊,2018.17(1):41-43
[2] 郎波,張博宇.面向大數據的非結構化數據管理平臺關鍵技術[J].信息技術與標準化,2013.10:53-56
[3] 劉宇,鄭成煥.基于Scrapy的深層網絡爬蟲研究[J].軟件,2017.38(7):111-114
[4] 齊鵬,李隱峰,宋玉偉.基于Python的Web數據采集技術[J].電子科技,2012.25(11):118-120
[5] Keven.網頁數據采集的發展歷史以及未來前景[EB/OL].http://www.bazhuayu.com/blog/wysjcjfzls.
[6] 劉碩.精通Scrapy網絡爬蟲[M].清華大學出版社,2017.
[7] 徐鴻飛.云計算安全問題初探——基于Amazon Dynamo與EC2的架構分析[J].計算機光盤軟件與應用,2013.16(17):21-22
[8] 孫寶華.基于Dynamo的存儲機制研究[D].西安電子科技大學,2013.
[9] 滕曉龍.如何為Hadoop選擇最佳彈性MapReduce框架[EB/OL].https://searchcloudcomputing.techtarget.com.cn/5-10795
[10] 杜彬.基于Selenium的定向網絡爬蟲設計與實現[J].金融科技時代,2016.7:35-39
[11] Jackson K R, Muriki K, Thomas R C, et al. Performance and cost analysis of the supernova factory on the amazon AWS cloud[J]. Scientific Programming,2011.19:2-3
[12] Juan J D, Prodan R. Multi-objective workflow scheduling in amazon EC2[J]. Cluster Computing,2014.17(2):169-189