亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2021-11-02 06:03:26忽愛平范伊紅
        無線互聯(lián)科技 2021年17期
        關(guān)鍵詞:頁面

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

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

        0 引言

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

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

        1.1 Selenium技術(shù)簡介

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

        1.2 標(biāo)簽

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

        2 案例實(shí)現(xiàn)

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

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

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

        2.2 程序的基本配置

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

        2.3 頁面加載

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

        2.4 圖片下載

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

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

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

        3 結(jié)語

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

        猜你喜歡
        頁面
        微信群聊總是找不到,打開這個(gè)開關(guān)就好了
        大狗熊在睡覺
        刷新生活的頁面
        在本機(jī)中輕松完成常見PDF操作
        電腦愛好者(2022年3期)2022-05-30 10:48:04
        移動(dòng)頁面設(shè)計(jì):為老人做設(shè)計(jì)
        Web安全問答(3)
        同一Word文檔 縱橫頁面并存
        網(wǎng)站結(jié)構(gòu)在SEO中的研究與應(yīng)用
        幾種頁面置換算法的基本原理及實(shí)現(xiàn)方法
        淺析ASP.NET頁面導(dǎo)航技術(shù)
        一本久道久久综合狠狠操| 亚洲av永久无码精品一区二区| 丰满爆乳一区二区三区| 国产在线欧美日韩一区二区| 熟女人妻一区二区中文字幕 | 手机在线亚洲精品网站| 国语对白嫖老妇胖老太| 国产精品第一二三区久久蜜芽| 亚洲无码毛片免费视频在线观看| 国产在线一区二区三区四区乱码| 久久亚洲中文字幕精品一区| 四川老熟妇乱子xx性bbw| 国产熟女亚洲精品麻豆| 国产午夜在线观看视频| 国产欧美在线观看不卡| 亚洲av国产精品色午夜洪2| 国产精品亚洲午夜不卡| 精品国产一区二区av麻豆不卡| 亚洲av无码国产精品色午夜软件| 国产伦久视频免费观看视频| 亚洲AV无码精品一区二区三区l| 久草视频在线播放免费| 午夜性刺激免费看视频| 国产免费丝袜调教视频| 亚洲日本在线va中文字幕| 日本一区二区三区综合视频| 色偷偷888欧美精品久久久| 欧美亚洲日韩国产人成在线播放| 国产中文久久精品| 亚州中文热码在线视频| 亚洲一区二区三区av无码| 狠狠色狠狠色综合久久第一次| 青青手机在线视频观看| 人妻少妇中文字幕久久| 久久无码专区国产精品s| 午夜a福利| 亚洲熟女天堂av一区二区三区| 久久精品亚洲精品国产色婷 | 51精品视频一区二区三区| 日本成人中文字幕亚洲一区| 日日躁夜夜躁狠狠躁|