時永坤
(華北計算技術研究所,北京市 100083)
基于WebDriver的定向網絡爬蟲設計與實現
時永坤
(華北計算技術研究所,北京市100083)
隨著Web 2.0的興起,網絡上的海量信息迎來了爆發性地增長。從網絡上的公開數據中提取有效信息成為了數據挖掘領域的新熱點。數據獲取是數據分析的第一步。Web 2.0時代的網站在內容和形態方面發生了深刻的變化,對傳統的以靜態頁面分析為基礎的網絡爬蟲提出了新的挑戰。本文利用WebDriver實現了一個定向網絡爬蟲,該爬蟲能夠自動采集指定網頁數據,支持Ajax等動態技術,能夠對簡單驗證碼進行識別,并繞過爬蟲檢測。利用該爬蟲對全國企業信用信息系統進行爬取,取得了良好效果。
網絡爬蟲;網頁解析;動態內容獲取
本文著錄格式:時永坤. 基于WebDriver的定向網絡爬蟲設計與實現[J]. 軟件,2016,37(9):94-97
隨著網絡的迅速發展,萬維網成為大量信息的載體,如何有效地提取并利用這些信息成為一個巨大的挑戰[1-2]。為解決這一問題,出現了以網絡爬蟲為基礎的搜索引擎技術。近年來,隨著Web 2.0的興起,互聯網的內容和形態發生了深刻的變化。相對于以門戶網站為代表的Web 1.0,Web 2.0強調個人化、去中心化、社會化,強調開放、共享、參與、創造,它讓用戶、參與、創作成為了互聯網文化的核心[3]。同時,為與其內容相適應,Web 2.0廣泛采用動態頁面、Ajax異步傳輸、前端MVC等動態技術。這些技術在提高網站開發效率、改善用戶體驗的同時[4],也對于以靜態頁面分析為主的傳統網頁爬蟲提出了新的挑戰。
首先,Ajax等動態技術的應用[5],導致傳統網絡爬蟲無法獲取動態站點中的所有頁面,無法充分利用網頁數據;其次,基于靜態頁面分析的傳統爬蟲難以還原瀏覽器渲染生成的動態頁面,為信息的提取增加了困難;同時,反爬蟲技術的應用也對傳統網絡爬蟲的發展提出了挑戰。針對上述問題,本文針對全國企業信用信息網,基于WebDriver設計并實現了一個定向網頁爬蟲。該爬蟲能夠自動采集指定網頁數據,支持Ajax等動態技術,能夠對簡單驗證碼進行識別,并繞過爬蟲檢測。
本文基于WebDriver實現網絡爬蟲,用于爬取企業信用信息,取得了較好結果。WebDriver是基于瀏覽器的開源自動化測試工具。利用WebDriver,可以自動加載網頁,執行JavaScript腳本,獲取頁面元素,而無需網絡通信、腳本執行流程等細節。同時,因為采用UserAgent模式,基于WebDriver的網絡爬蟲能夠繞過某些頁面對于爬蟲的檢測和限制[6]。具體模塊設計如下:

1.1瀏覽器模塊
WebDriver支持Chrome、Firefox、IE、PhantomJS等多種瀏覽器模塊。其中Chrome、Firefox、IE是可視化瀏覽器,執行過程中能夠直觀觀察程序過程,便于開發調試。PhantomJS是Headless瀏覽器,僅啟動瀏覽器內核,不進行可視化顯示,因而運行速度較快。本文采用PhantomJS進行網絡爬蟲開發。本文設計的網頁爬蟲利用了PhantomJS支持以下特性:
1. 元素選擇器
PhantomJS能夠通過XPath、CSS等選擇其選擇頁面中的指定元素,以便對元素進行后續操作。
2. 頁面交互
PhantomJS支持鼠標單擊、雙擊、移入移出、拖拽等交互動作。使用這些動作能夠模擬用戶操作,獲取所需信息。
3. 表單填充
PhantomJS能夠獲取和設置input、select等表單元素值。
4. JavaScript支持
1.2頁面解析模塊
本文采用Beautiful Soup進行頁面解析。Beautiful Soup能夠從HTML或XML文件中提取數據,能夠通過用戶指定的轉換器實現通用的文檔瀏覽、查找和修改。Beautiful Soup訪問頁面元素屬性、子節點和遍歷查找文檔樹的相關接口,為文檔解析提供了便利[7]。為了便于開發,提高代碼復用性[8],本文實現的網頁爬蟲在Beautiful Soup的基礎上開發了以下文檔解析模塊:
1.2.1文檔解析
本文設計的爬蟲需要在多個Web頁面、iframe、標簽間進行切換,以爬取所需信息。文檔解析模塊需實現以下功能:
1. 判斷頁面是否完成加載
本爬蟲通過WebDriver提供的wait.until API判斷配置文件中指定的元素是否存判斷頁面是否完成加載。
2. 查找要解析的標簽
使用通過調用find_element_by_xpath實現此功能。
3. Frame切換
本爬蟲針對北京市企業信用信息網進行爬取,該網站中有效信息分布于多個iframe中。由于WebDriver不能跨iframe進行文檔解析,所以文檔解析模塊需要能夠按照配置信息在多個iframe間自動切換。本文采用WebDriver的switch_to.frame API進行iframe切換,并在該iframe解析完成后通過調用switch_to.default_content切換回默認頁面。
文檔解析模塊通過配置文件讀取要解析的標簽的name、id、序號等,從瀏覽器模塊獲取到的頁面中提取出所需標簽,并調用表格解析模塊提取有效信息。配置文件設計如下:

配置文件中各字段含義為:
1. tag_name 信息類型
2. div_id要解析的標簽的ID
3. tables要解析的Table元素元數據
4. frame要解析的iframe元數據
1.2.2表格解析模塊
1. 表格解析模塊用于從table元素中提取出所需信息,將其轉換為易于分析處理的JSON文檔。本文實現的網絡爬蟲需要對多種形式的表格進行處理,包括單表頭行的表格(圖2)、多表頭的表格(圖3)、分頁表格(圖4)。

圖2 單表頭行表格

圖3 多表頭表格

圖4 分頁表格
本模塊需要實現以下功能:
1. 判斷表格形式
對單表頭行表格和多表頭表格,可以通過首行中是否存在td標簽進行區分。對于分頁表格,可以通過表格是否為與iframe中進行判斷。
2. 解析表格
3. 提供翻頁功能
對于分頁表格,需要通過模擬翻頁才能提取到全部信息。本文的網絡爬蟲通過以下步驟實現翻頁功能:
1)獲取總頁數
本例中表格頁數保存在id為pagescount的input元素中,通過Beautiful Soup獲取該元素的值,即可取得表格總頁數
2)翻頁
利用WebDriver的execute_script API可以執行JavaScript函數。本爬蟲通過調用頁面中的jumppage函數實現翻頁功能。
1.2.3驗證碼處理模塊
本文爬取的全國企業信用信息公示系統處通過瀏覽器標識、用戶token、驗證碼等技術進行爬蟲檢測。利用WebDriver可以很好的繞過前兩種檢測方法,但該網站采用的圖形驗證碼較復雜(圖5),難以進行機器識別[9],本文采用半自動方法處理驗證碼。

圖5 驗證碼示例
驗證碼處理模塊提供以下功能:
1. 提取并顯示驗證碼
2. 獲取用戶輸入
3. 填充并提交驗證碼
4. 錯誤提示
本文給出了利用WebDriver實現定向網絡爬蟲的設計思路和技術方案,實現的爬蟲能夠準確快速的爬取所需信息。由于采用了瀏覽器模擬操作,能夠繞過大多數網站的爬蟲檢測策略,降低了爬蟲開發難度和所需工作量。
[1] 周立柱, 林玲. 聚焦爬蟲技術研究綜述[J]. 計算機應用, 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] 郭世龍, 王晨升. 主題爬蟲設計與實現[J]. 軟件, 2013, 34(12): 107-109.
[3] 李曉堂, 詹峰, 龍能. 基于SNS的社區網絡服務架構與設計[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] 洪立印, 徐蔚然. 一種結構化數據關系特征抽取和表示模型[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-),男,碩士研究生,主要研究方向:計算機技術應用。