国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Selenium的網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)

2021-11-02 06:03忽愛平范伊紅
無線互聯(lián)科技 2021年17期
關(guān)鍵詞:爬蟲瀏覽器代碼

忽愛平,范伊紅,李 陽,李 坤

(河南科技大學(xué) 軟件學(xué)院,河南 洛陽 471000)

0 引言

隨著爬蟲技術(shù)的不斷發(fā)展,許多網(wǎng)站運用了反爬蟲技術(shù)對數(shù)據(jù)進行加密,致使爬取數(shù)據(jù)時遇到的問題越來越多。例如,某著名文檔網(wǎng)站,經(jīng)過解析后發(fā)現(xiàn),其文檔是由圖片組成,而圖片代碼并不是直接寫在平時開發(fā)人員使用的標簽中,而是通過HTML5的canvas元素使用JavaScript在網(wǎng)頁上繪制圖像[1]。這大大阻礙了圖片的爬取。本文運用Python爬蟲技術(shù)加Selenium技術(shù)爬取該網(wǎng)站的文檔圖片,將canvas畫布中的圖像進行解析,成功將該網(wǎng)站中的文檔圖片爬取了出來。

1 項目有關(guān)介紹

1.1 Selenium技術(shù)簡介

Selenium是一個Web應(yīng)用程序測試的工具,起初是為了網(wǎng)站自動化測試而開發(fā)的,作用是模擬用戶在瀏覽器上的操作。Selenium可以直接運行在瀏覽器上,它支持所有主流的瀏覽器,包括PhantomJS這些無界面的瀏覽器,可謂作用之廣泛。Selenium可以根據(jù)用戶的指令,指導(dǎo)瀏覽器自動加載頁面,獲取需要的數(shù)據(jù),甚至于網(wǎng)頁截屏、監(jiān)聽網(wǎng)站動作等等。Selenium自己不帶瀏覽器,不支持瀏覽器的功能,它需要與第三方瀏覽器結(jié)合在一起才能使用。

1.2 標簽

HTML5中的新標簽,通過JavaScript腳本完成圖形的繪制。用戶可以通過多種方法使用canvas繪制路徑、盒、圓、字符以及添加圖像。

2 案例實現(xiàn)

本文以某文檔網(wǎng)站為案例,用自動化測試Selenium體驗一下爬取流程。

2.1 抓包分析,明確爬取思路

首先,打開某文檔網(wǎng)站的頁面進行抓包分析。其次,通過分析發(fā)現(xiàn),頁面中的數(shù)據(jù)帶有加密混淆,所以傳統(tǒng)的爬蟲思路在此站點行不通。遇到這種情況,一般有兩種解決方案:第一種是通過使用JavaScript逆向技術(shù)找到站點的加密邏輯,并用Python代碼將其加密邏輯模擬構(gòu)造出來。第二種是通過Selenium自動化測試工具來模擬瀏覽器,直接獲取頁面源碼。此處采用的是第二種方案。當獲取源碼之后,就會發(fā)現(xiàn)頁面源碼中并沒有想要的圖片鏈接信息,而想要的圖片信息就蘊藏在標簽中,可以通過編寫一段JavaScript代碼來獲取標簽中的圖片信息。最后,將所有的文檔圖片轉(zhuǎn)換成PDF并拼接到一起。具體的流程如下。

2.2 程序的基本配置

使用logging對日志輸出進行相關(guān)配置,方便觀察程序的執(zhí)行狀況。變量TIME_OUT表示超時時間,options中是對瀏覽器的相關(guān)配置,例如:下載圖片是默認不顯示彈框,圖片下載后的默認保存路徑,設(shè)置瀏覽器的無頭模式等;browser用來接收一個Chrome對象,并將options作為參數(shù)設(shè)置給該瀏覽器對象。瀏覽器打開頁面后,頁面要進行加載,wait定義了瀏覽器的顯示等待時間。代碼如下:

2.3 頁面加載

通過觀察發(fā)現(xiàn),每個文檔頁面并不是一開始就全部加載出來,而是通過用戶滾動右側(cè)的滾動條來加載后續(xù)的頁面信息。所以圖片進行下載之前要用Selenium來模擬用戶的滾動效果,以確保將頁面的所有信息都加載出來。此處,可以使用JavaScript代碼來控制瀏覽器的滑動操作,這段代碼描述的含義是通過js中的間隔器,每隔一秒將滾動條下滑整個文檔高度的10%,直至頁面全部加載完畢。最后,使用browser對象的execute_script方法將JavaScript代碼執(zhí)行即可。代碼如下:

2.4 圖片下載

當頁面全部加載完畢,就可以開始下載響應(yīng)的文檔圖片信息了。首先,需要獲取到所有的canvas元素對象。在HTML5標準中,標簽的新屬性download可以用來指明下載文件的名稱。所以每處理一個canvas對象都需要創(chuàng)建一個元素,將圖片名稱賦值給的download屬性,使用URL.createObjectURL(Objparam)方法將canvas中的內(nèi)容生成為指定格式的URL并將其賦值給的href屬性。最后,調(diào)用click()方法可模擬點擊操作,這樣瀏覽器自動下載所有的圖片[2]。部分代碼如下:

2.5 文檔格式的轉(zhuǎn)換

圖片下載過后,要將其進行PDF格式轉(zhuǎn)換,最終生成一篇格式完整的文檔。這里使用的第三方庫是fpdf和PIL。將所有的圖片處理程序定義成一個方法,在圖片下載完成后進行調(diào)用即可。

3 結(jié)語

隨著互聯(lián)網(wǎng)的飛速發(fā)展,越來越多的網(wǎng)站通過對數(shù)據(jù)加密來防止數(shù)據(jù)被非法用戶直接爬取。而通過Selenium技術(shù)則可以在避免過多檢測的情況下向服務(wù)器發(fā)起正常請求獲取數(shù)據(jù),節(jié)省了大量分析代碼的時間[3]。本文以某文檔網(wǎng)站為例,設(shè)計了一段爬取標簽中的圖片信息的程序,希望對大家有所幫助。

猜你喜歡
爬蟲瀏覽器代碼
利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
反瀏覽器指紋追蹤
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
環(huán)球瀏覽器
乌鲁木齐市| 呼玛县| 缙云县| 仁化县| 马鞍山市| 双辽市| 达拉特旗| 刚察县| 德保县| 无为县| 富源县| 灵丘县| 梁河县| 惠安县| 璧山县| 夹江县| 商都县| 双鸭山市| 耒阳市| 安顺市| 隆林| 榆中县| 习水县| 安西县| 彰化市| 安多县| 五华县| 高安市| 广丰县| 南和县| 剑川县| 安多县| 缙云县| 修文县| 仙居县| 梓潼县| 宜兰县| 信丰县| 商河县| 桂林市| 江安县|