時永坤
(華北計算技術(shù)研究所,北京市 100083)
基于WebDriver的定向網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)
時永坤
(華北計算技術(shù)研究所,北京市100083)
隨著Web 2.0的興起,網(wǎng)絡(luò)上的海量信息迎來了爆發(fā)性地增長。從網(wǎng)絡(luò)上的公開數(shù)據(jù)中提取有效信息成為了數(shù)據(jù)挖掘領(lǐng)域的新熱點。數(shù)據(jù)獲取是數(shù)據(jù)分析的第一步。Web 2.0時代的網(wǎng)站在內(nèi)容和形態(tài)方面發(fā)生了深刻的變化,對傳統(tǒng)的以靜態(tài)頁面分析為基礎(chǔ)的網(wǎng)絡(luò)爬蟲提出了新的挑戰(zhàn)。本文利用WebDriver實現(xiàn)了一個定向網(wǎng)絡(luò)爬蟲,該爬蟲能夠自動采集指定網(wǎng)頁數(shù)據(jù),支持Ajax等動態(tài)技術(shù),能夠?qū)唵悟炞C碼進(jìn)行識別,并繞過爬蟲檢測。利用該爬蟲對全國企業(yè)信用信息系統(tǒng)進(jìn)行爬取,取得了良好效果。
網(wǎng)絡(luò)爬蟲;網(wǎng)頁解析;動態(tài)內(nèi)容獲取
本文著錄格式:時永坤. 基于WebDriver的定向網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)[J]. 軟件,2016,37(9):94-97
隨著網(wǎng)絡(luò)的迅速發(fā)展,萬維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個巨大的挑戰(zhàn)[1-2]。為解決這一問題,出現(xiàn)了以網(wǎng)絡(luò)爬蟲為基礎(chǔ)的搜索引擎技術(shù)。近年來,隨著Web 2.0的興起,互聯(lián)網(wǎng)的內(nèi)容和形態(tài)發(fā)生了深刻的變化。相對于以門戶網(wǎng)站為代表的Web 1.0,Web 2.0強(qiáng)調(diào)個人化、去中心化、社會化,強(qiáng)調(diào)開放、共享、參與、創(chuàng)造,它讓用戶、參與、創(chuàng)作成為了互聯(lián)網(wǎng)文化的核心[3]。同時,為與其內(nèi)容相適應(yīng),Web 2.0廣泛采用動態(tài)頁面、Ajax異步傳輸、前端MVC等動態(tài)技術(shù)。這些技術(shù)在提高網(wǎng)站開發(fā)效率、改善用戶體驗的同時[4],也對于以靜態(tài)頁面分析為主的傳統(tǒng)網(wǎng)頁爬蟲提出了新的挑戰(zhàn)。
首先,Ajax等動態(tài)技術(shù)的應(yīng)用[5],導(dǎo)致傳統(tǒng)網(wǎng)絡(luò)爬蟲無法獲取動態(tài)站點中的所有頁面,無法充分利用網(wǎng)頁數(shù)據(jù);其次,基于靜態(tài)頁面分析的傳統(tǒng)爬蟲難以還原瀏覽器渲染生成的動態(tài)頁面,為信息的提取增加了困難;同時,反爬蟲技術(shù)的應(yīng)用也對傳統(tǒng)網(wǎng)絡(luò)爬蟲的發(fā)展提出了挑戰(zhàn)。針對上述問題,本文針對全國企業(yè)信用信息網(wǎng),基于WebDriver設(shè)計并實現(xiàn)了一個定向網(wǎng)頁爬蟲。該爬蟲能夠自動采集指定網(wǎng)頁數(shù)據(jù),支持Ajax等動態(tài)技術(shù),能夠?qū)唵悟炞C碼進(jìn)行識別,并繞過爬蟲檢測。
本文基于WebDriver實現(xiàn)網(wǎng)絡(luò)爬蟲,用于爬取企業(yè)信用信息,取得了較好結(jié)果。WebDriver是基于瀏覽器的開源自動化測試工具。利用WebDriver,可以自動加載網(wǎng)頁,執(zhí)行JavaScript腳本,獲取頁面元素,而無需網(wǎng)絡(luò)通信、腳本執(zhí)行流程等細(xì)節(jié)。同時,因為采用UserAgent模式,基于WebDriver的網(wǎng)絡(luò)爬蟲能夠繞過某些頁面對于爬蟲的檢測和限制[6]。具體模塊設(shè)計如下:
1.1瀏覽器模塊
WebDriver支持Chrome、Firefox、IE、PhantomJS等多種瀏覽器模塊。其中Chrome、Firefox、IE是可視化瀏覽器,執(zhí)行過程中能夠直觀觀察程序過程,便于開發(fā)調(diào)試。PhantomJS是Headless瀏覽器,僅啟動瀏覽器內(nèi)核,不進(jìn)行可視化顯示,因而運行速度較快。本文采用PhantomJS進(jìn)行網(wǎng)絡(luò)爬蟲開發(fā)。本文設(shè)計的網(wǎng)頁爬蟲利用了PhantomJS支持以下特性:
1. 元素選擇器
PhantomJS能夠通過XPath、CSS等選擇其選擇頁面中的指定元素,以便對元素進(jìn)行后續(xù)操作。
2. 頁面交互
PhantomJS支持鼠標(biāo)單擊、雙擊、移入移出、拖拽等交互動作。使用這些動作能夠模擬用戶操作,獲取所需信息。
3. 表單填充
PhantomJS能夠獲取和設(shè)置input、select等表單元素值。
4. JavaScript支持
1.2頁面解析模塊
本文采用Beautiful Soup進(jìn)行頁面解析。Beautiful Soup能夠從HTML或XML文件中提取數(shù)據(jù),能夠通過用戶指定的轉(zhuǎn)換器實現(xiàn)通用的文檔瀏覽、查找和修改。Beautiful Soup訪問頁面元素屬性、子節(jié)點和遍歷查找文檔樹的相關(guān)接口,為文檔解析提供了便利[7]。為了便于開發(fā),提高代碼復(fù)用性[8],本文實現(xiàn)的網(wǎng)頁爬蟲在Beautiful Soup的基礎(chǔ)上開發(fā)了以下文檔解析模塊:
1.2.1文檔解析
本文設(shè)計的爬蟲需要在多個Web頁面、iframe、標(biāo)簽間進(jìn)行切換,以爬取所需信息。文檔解析模塊需實現(xiàn)以下功能:
1. 判斷頁面是否完成加載
本爬蟲通過WebDriver提供的wait.until API判斷配置文件中指定的元素是否存判斷頁面是否完成加載。
2. 查找要解析的標(biāo)簽
使用通過調(diào)用find_element_by_xpath實現(xiàn)此功能。
3. Frame切換
本爬蟲針對北京市企業(yè)信用信息網(wǎng)進(jìn)行爬取,該網(wǎng)站中有效信息分布于多個iframe中。由于WebDriver不能跨iframe進(jìn)行文檔解析,所以文檔解析模塊需要能夠按照配置信息在多個iframe間自動切換。本文采用WebDriver的switch_to.frame API進(jìn)行iframe切換,并在該iframe解析完成后通過調(diào)用switch_to.default_content切換回默認(rèn)頁面。
文檔解析模塊通過配置文件讀取要解析的標(biāo)簽的name、id、序號等,從瀏覽器模塊獲取到的頁面中提取出所需標(biāo)簽,并調(diào)用表格解析模塊提取有效信息。配置文件設(shè)計如下:
配置文件中各字段含義為:
1. tag_name 信息類型
2. div_id要解析的標(biāo)簽的ID
3. tables要解析的Table元素元數(shù)據(jù)
4. frame要解析的iframe元數(shù)據(jù)
1.2.2表格解析模塊
1. 表格解析模塊用于從table元素中提取出所需信息,將其轉(zhuǎn)換為易于分析處理的JSON文檔。本文實現(xiàn)的網(wǎng)絡(luò)爬蟲需要對多種形式的表格進(jìn)行處理,包括單表頭行的表格(圖2)、多表頭的表格(圖3)、分頁表格(圖4)。
圖2 單表頭行表格
圖3 多表頭表格
圖4 分頁表格
本模塊需要實現(xiàn)以下功能:
1. 判斷表格形式
對單表頭行表格和多表頭表格,可以通過首行中是否存在td標(biāo)簽進(jìn)行區(qū)分。對于分頁表格,可以通過表格是否為與iframe中進(jìn)行判斷。
2. 解析表格
3. 提供翻頁功能
對于分頁表格,需要通過模擬翻頁才能提取到全部信息。本文的網(wǎng)絡(luò)爬蟲通過以下步驟實現(xiàn)翻頁功能:
1)獲取總頁數(shù)
本例中表格頁數(shù)保存在id為pagescount的input元素中,通過Beautiful Soup獲取該元素的值,即可取得表格總頁數(shù)
2)翻頁
利用WebDriver的execute_script API可以執(zhí)行JavaScript函數(shù)。本爬蟲通過調(diào)用頁面中的jumppage函數(shù)實現(xiàn)翻頁功能。
1.2.3驗證碼處理模塊
本文爬取的全國企業(yè)信用信息公示系統(tǒng)處通過瀏覽器標(biāo)識、用戶token、驗證碼等技術(shù)進(jìn)行爬蟲檢測。利用WebDriver可以很好的繞過前兩種檢測方法,但該網(wǎng)站采用的圖形驗證碼較復(fù)雜(圖5),難以進(jìn)行機(jī)器識別[9],本文采用半自動方法處理驗證碼。
圖5 驗證碼示例
驗證碼處理模塊提供以下功能:
1. 提取并顯示驗證碼
2. 獲取用戶輸入
3. 填充并提交驗證碼
4. 錯誤提示
本文給出了利用WebDriver實現(xiàn)定向網(wǎng)絡(luò)爬蟲的設(shè)計思路和技術(shù)方案,實現(xiàn)的爬蟲能夠準(zhǔn)確快速的爬取所需信息。由于采用了瀏覽器模擬操作,能夠繞過大多數(shù)網(wǎng)站的爬蟲檢測策略,降低了爬蟲開發(fā)難度和所需工作量。
[1] 周立柱, 林玲. 聚焦爬蟲技術(shù)研究綜述[J]. 計算機(jī)應(yīng)用, 2005, 25(9): 1965-1969. ZHOU LZ, LIN L. Survey on the research of focused crawling technique[J]. Conputer Application, 2005, 25(9): 1965-1969. (in Chinese).
[2] 郭世龍, 王晨升. 主題爬蟲設(shè)計與實現(xiàn)[J]. 軟件, 2013, 34(12): 107-109.
[3] 李曉堂, 詹峰, 龍能. 基于SNS的社區(qū)網(wǎng)絡(luò)服務(wù)架構(gòu)與設(shè)計[J]. 軟件, 2014, 35(2): 23-24.
[4] Darwin P B, Kozlowski P. AngularJS web application development[M]. Packt Publ., 2013.
[5] Garrett J J. Ajax: A new approach to web applications[J]. 2005.
[6] Leotta M, Clerissi D, Ricca F, et al. Comparing the maintainability of selenium webdriver test suites employing different locators: A case study[C]//Proceedings of the 2013 international workshop on joining academia and industry contributions to testing automation. ACM, 2013: 53-58.
[7] Richardson L. Beautiful soup[J]. Crummy: The Site, 2013.
[8] 洪立印, 徐蔚然. 一種結(jié)構(gòu)化數(shù)據(jù)關(guān)系特征抽取和表示模型[J]. 軟件, 2013, 34(12): 148-151.
[9] Von Ahn L, Blum M, Hopper N J, et al. CAPTCHA: Using hard AI problems for security[C]//International Conference on the Theory and Applications of Cryptographic Techniques. Springer Berlin Heidelberg, 2003: 294-311.
Design and Implement of WebDriver Based Crawler
SHI Yong-kun
(North China Institute of Computing Technology, Beijing 100083, China)
With the development of Web 2.0, the scale of information on the network has been growing explosively. Extracting useful information from the public data on the network has become a new hotspot in the field of data mining. Data acquisition is the first step in data analysis. Web sites in the Web 2.0 era change profoundly both in the content and form, the traditional Web Crawler based on static page analysis faces new challenges. In this paper, we use WebDriver to implement a directed web crawler, which can automatically collect specified web page data, support dynamic technologies such as Ajax, and can identify simple code and bypass crawler detection. Application of the crawler on the national enterprise credit information system achieved good results.
Web Crawler; Web Analysis; Acquirement of Dynamic Content;
TP311
A
10.3969/j.issn.1003-6970.2016.09.022
時永坤(1990-),男,碩士研究生,主要研究方向:計算機(jī)技術(shù)應(yīng)用。