?

基于WebDriver技術的定向網絡爬蟲研究

2020-04-08 09:30劉洋田儒賢唐蘭文
電腦知識與技術 2020年3期

劉洋 田儒賢 唐蘭文

摘要:近年來,隨著互聯網與通信技術的迅猛發展,數據的快速增長成了許多行業共同面對的嚴峻挑戰和寶貴機遇,各種開發網站技術也呈現出層出不窮的趨勢,異步加載技術因此得到了廣泛的應用。如何高效完整的獲取異步加載數據顯得極為重要。以車型CCC證書網站為研究對象,采用WebDriver模擬網頁瀏覽技術請求網站,能夠對驗證碼進行識別,繞過爬蟲檢測,獲取到同Ajax異步加載技術相同的數據。

關鍵詞:WebDriver;定向爬蟲;CCC證書網站

中圖分類號:TP311

文獻標識碼:A

文章編號:1009-3044(2020)03-0034-03

1 概述

隨著“Web 2.0”的概念誕生和不斷發展,當今網站則更注重用戶的交互作用,用戶既是網站內容的瀏覽者,也是網站內容的制造者[1]。為了與之內容相適應,網站大量采用了Ajax技術,為了使文件的體積變小,經常會引用被壓縮后JavaScript腳本。這些技術在提高網站開發效率、改善用戶體驗的同時,也對于以靜態頁面分析為主的傳統網頁爬蟲提出了新的挑戰。采用Ajax技術爬蟲策略,具有一定的局限性,主要體現在三點:1)Ajax請求的url中含有隨機數,2)Ajax請求的url禁止直接訪問,必須構建請求頭;3)對敏感信息進行加密,每次更改爬取目標時都需要重新分析構建Ajax請求的url,無形之中增加了爬蟲重新定向所需的工作量[2]。而WebDriver技術的出現恰好可以解決這個難題,能夠在復雜的網頁環境中,獲取到實際有效的數據[3]。

2 WebDriver技術簡介

WebDriver是Selenium(-個瀏覽器自動化操作框架)一個非常重要的工具,針對各個瀏覽器而開發,支持Firefox(Firefox-Driver)、IE(IntemetExplorerDriver)、Opera(OperaDriver)和Chrome(ChromeDriver)。 它還支持Android(AndroidDriver)和iPhone(IPhoneDriver)的移動應用瀏覽器。除了來自瀏覽器廠商的支持,它還提供了各種語言環境的API,可以采用Python、Ruby、Java、C#等開發人員熟悉的編程語言來編寫應用程序。

3 實驗與設計

本實驗采用WebDriver技術,模擬用戶瀏覽網站,支持Ajax動態加載技術,執行JavaScript腳本,獲取頁面元素,而無須網絡通信、腳本執行流程等細節,借助第三方破解驗證碼API對其進行識別,繞過機器檢測,從而獲取到數據[4]。具體設計流程如圖1所示。

3.1 搭建實驗運行環境

本實驗設計的程序所需要的環境配置如表l所示,電腦的硬件要求為Intel Core i5處理器,運行內存為16G,使用wm7操作系統。開發工具為MyEclipse2014,采用Java作為開發語言,jdk版本為1.7,數據存儲使用Oracle llg,運用Chrome瀏覽器作為WebDriver運行的載體,除此之外,還需要下載與之對應的Chrome驅動,需要注意的是,所用到的瀏覽器必須與驅動相對應,否則會出現無法啟動程序的異常。瀏覽器與驅動版本對應關系如表2所示,由于篇幅有限,本文只列出部分僅供參考。

3.2 處理驗證碼

搭建好環境之后,便可以借助WebDriver啟動瀏覽器,本實驗所爬取的網站,采用了驗證碼技術對爬蟲進行檢測校驗。實驗使用名為“超級鷹”的打碼軟件,對驗證碼進行識別,該軟件對干擾項較多的驗證碼識別成功率較高,擁有能夠快速集成圖片識別API,廣泛支持各種編程語言,且支持多種不同類型的驗證碼格式,同時具有比較高的穩定性。實驗截取的其中一張驗證碼圖片如圖2所示:

WebDriver提供了豐富的元素定位API(完整的API列表可以查看WebDriver的文檔手冊),首先調用findElement方法,通過獲取img標簽的id屬性定位到驗證碼圖片的元素[5],然后對目標元素進行截屏成圖片并保存到本地,最后調用識別軟件的PostPic方法,填人格式類型,本地圖片路徑,秘鑰等參數,返回json字符串示例:

f”err_ no”:0,

”err str”:”OK”,

”pic_id”:”16622285 16102”,

”pic_str':”8vka”,

"md5”:”35d5c7f6f53223fbdc5b72783dbOc2c0"

J.其中pic_str即為我們所需要獲取到的驗證碼數據。

3.3 請求網址

拿到驗證碼之后,通過請求地址,返回實驗所需要獲取到的數據,具體步驟如下。

(1)打開指定URL的Web頁面,關鍵代碼如下cDriver=new RemoteWebDriver(service.getUrlO,DesiredCapabilities.chromeO);cDriver.get(url),其中cDriver為初始化WebDriver對象,指定打開Chrome瀏覽器,這一步操作和普通爬蟲工具相同,沒有與網站進行任何交互,可以獲取到整個html文件源碼。

(2)定位目標元素,由于本實驗背景為某個車型CCC證書查詢網站,需要輸入對應的證書編號,調用findElement方法查找元素,再調用sendKeys方法來模擬用戶輸入所需要查詢的證書編號,獲取驗證碼詳細方法見步驟3.2。

(3)如果返回的源碼文件中包含“沒有查詢到數據”的字樣,則直接返回message消息,本次循環結束,否則執行步驟(4)。 (4)執行交互操作。調用上述這些元素定位函數后,會返回一個WebElement對象,通過調用該對象的成員方法即可實現針對此元素的交互操作。通過xPath,根據input標簽的type屬性,定位到查詢按鈕,調用click方法去觸發Ajax向服務器異步請求數據,最后再調用cDriver.getPageSource0獲取到查詢條件后的html源碼,上述步驟的關鍵部分代碼如下:

WebElement keyword=cDriver. findElement(By. name(”key-word”));keyword.sendKeys(certNumber);

imagePassword.sendKeys (verifyCode);

WebElement button=cDriver. findElement(By. xpath(”//input[@type=submit,]”));

button. click0;

cDriver. manage0. timeouts0. pageLoadTime-out(60, TimeUnit.SECONDS);

String pageSource= cDriver.getPageSource0;,如果驗證碼正確,則進入步驟(5),否則重復步驟(2),直到獲取到數據。

(5)解析數據,存人數據庫,結束循環整個請求地址的流程如圖3所示:

3.4 解析頁面存入數據庫

實驗采用Jsoup技術來解析獲取到html源碼文件,它是一款Java的HTML解析器,可直接解析某個URL地址、HTML文本內容,提供了非常便利的API,可以通過操作DOM節點,或者類似于Jquery的操作方法來解析數據[6]。通過步驟3.3獲取到的部分源碼文件如圖4所示。

拿到html源文件后,調用Jsoup的parse方法對源碼進行解析,部門關鍵代碼如下

Document doc= Jsoup.parse(htmlCode);

Element aIITrNode=doc. getElementsByTag(”table”).get(4).getElementsByTag(”tbody”)

.get(O).getElementsByTag(”tr”).get(0);

然后依次獲取tr元素下每個td元素,便可以取到所有數據

4 結束語

本文以車輛CCC證書查詢網站為研究背景,分析了傳統爬蟲方法存在的弊端,將實驗分為四個部分:運行環境的搭建,識別驗證碼,采集數據,解析數據并存人數據庫,采用Web-Driver技術啟動瀏覽器,模擬用戶完成對頁面的交互操作從而獲取到實驗數據。本文所設計的爬蟲程序仍有一些局限性,例如,不能支持多個證書編號同時運行,采集速度上還有待研究,仍然需要對其不斷完善,便于后期對該技術的持續利用。

參考文獻:

[1]賀杰.基于Webdriver爬蟲技術的研究[D].南昌:江西財經大學軟件與通信學院,2016.

[2]孫駿雄.基于網絡爬蟲的網站信息采集技術研究[D].大連:大連海事大學,2014.

[3]時永坤.基于WebDriver的定向網絡爬蟲設計與實現[D].北京:華北計算技術研究所,2016.

[4]李曉堂,詹峰,龍能,基于SNS的社區網絡服務架構與設計[J].軟件,2014,35(2):23-24.

[5]洪立印,徐蔚然.一種結構化數據關系特征抽取和表示模型[J].軟件,2013,34(12):148-151.

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合