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

?

Python環(huán)境下利用Selenium與JavaScript逆向技術(shù)爬蟲研究

2022-06-11 00:24時春波李衛(wèi)東秦丹陽張海嘯吳崢嶸
河南科技 2022年10期
關(guān)鍵詞:爬蟲逆向瀏覽器

時春波 李衛(wèi)東 秦丹陽 張海嘯 吳崢嶸

摘 要:針對使用調(diào)試檢測、數(shù)據(jù)加密等技術(shù)的網(wǎng)站,解析工具Beautiful Soup難以對網(wǎng)頁進(jìn)行解析爬取數(shù)據(jù)。本研究基于Python環(huán)境,結(jié)合JavaScript逆向技術(shù)、Beautiful Soup網(wǎng)頁解析等網(wǎng)絡(luò)爬蟲技術(shù),利用中間人攻擊工具M(jìn)itmproxy(man-in-the-middle attack proxy)在本地指定設(shè)備端口開啟本地代理,攔截并修改網(wǎng)頁響應(yīng)。同時,運用Web自動化工具Selenium來啟動瀏覽器,設(shè)置使用代理服務(wù)器,連接到本地Mitmproxy代理,訪問被修改的響應(yīng)網(wǎng)頁進(jìn)行網(wǎng)頁調(diào)試和解析,并對加密數(shù)據(jù)進(jìn)行還原,解決網(wǎng)絡(luò)爬蟲中調(diào)試檢測和數(shù)據(jù)加密難題,從而爬取數(shù)據(jù)。

關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;JavaScript逆向技術(shù);網(wǎng)絡(luò)代理;Selenium

中圖分類號:TP393.092 ? ? 文獻(xiàn)標(biāo)志碼:A ? ? 文章編號:1003-5168(2022)10-0020-04

DOI:10.19968/j.cnki.hnkj.1003-5168.2022.10.004

Research on Crawler Using Selenium and JavaScript Reverse

Technology in Python Environment

SHI Chunbo? ? LI Weidong? ? QIN Danyang? ? ZHANG Haixiao? ? WU Zhengrong

(College of Information Science and Engineering, Henan University of Technology, Zhengzhou 450001, China)

Abstract:For websites that use debugging detection, data encryption and other technologies,the parsing tool beautiful soup is difficult to parse web pages and crawl data Based on the python environment, combined with JavaScript reverse technology,beautiful soup web page parsing and other web crawler technologies,this study uses the man in the middle attack proxy (mitmproxy) to open the local proxy at the local designated device port,intercept and modify the web page response,and uses the web automation tool selenium to start the browser,set up the proxy server and connect to the local mitmproxy proxy.Visit the modified middle note to debug and analyze the web page,restore the encrypted data,solve the problem of debugging and data encryption in web crawler,and then crawl data.

Keywords:web crawler; JavaScript reverse technology;network agent;Selenium

0 引言

隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,萬維網(wǎng)成為大量信息的載體,如何有效提取并利用這些海量信息成為一個巨大挑戰(zhàn)。爬蟲技術(shù)就是在這樣背景下誕生的,其不僅在搜索引擎領(lǐng)域得到廣泛應(yīng)用,在大數(shù)據(jù)分析、商業(yè)等領(lǐng)域也得到了大規(guī)模應(yīng)用。隨著網(wǎng)絡(luò)反爬蟲技術(shù)[1]的發(fā)展,爬取數(shù)據(jù)也越來越困難。本研究針對網(wǎng)絡(luò)爬蟲中調(diào)試檢測和數(shù)據(jù)加密等反爬蟲技術(shù),使用Python爬蟲技術(shù),結(jié)合Selenium和JavaScript逆向技術(shù),加入Mitmproxy進(jìn)行網(wǎng)頁響應(yīng)攔截和修改,解決網(wǎng)絡(luò)爬蟲中調(diào)試檢測和數(shù)據(jù)加密難題,從而爬取數(shù)據(jù)。

1 相關(guān)網(wǎng)絡(luò)爬蟲技術(shù)

1.1 Python爬蟲技術(shù)

網(wǎng)絡(luò)爬蟲[2]又稱網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機器人,是一種按照一定規(guī)則自動瀏覽、檢索網(wǎng)頁信息的程序或腳本。網(wǎng)絡(luò)爬蟲能夠自動請求網(wǎng)頁,并將所需要的數(shù)據(jù)抓取出來。通過對抓取到的數(shù)據(jù)進(jìn)行處理,從而提取出有價值的信息。

網(wǎng)絡(luò)爬蟲可分為三大類,分別是通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲和增量式網(wǎng)絡(luò)爬蟲。通用網(wǎng)絡(luò)爬蟲是搜索引擎的重要組成部分,須遵守Robots協(xié)議。在應(yīng)用過程中,通用網(wǎng)絡(luò)爬蟲一般會從初始UR開始,獲取初始頁面的代碼,同時會從代碼提取所需的URL,并將其放入列表中,直到其滿足停止條件;增量式網(wǎng)絡(luò)爬蟲是指對已下載網(wǎng)頁采取增量式更新方式,只爬取新產(chǎn)生或發(fā)生變化的網(wǎng)頁,能夠在一定程度上保證所爬取數(shù)據(jù)的時效性;聚焦網(wǎng)絡(luò)爬蟲是面向特定需求的一種網(wǎng)絡(luò)爬蟲程序,與通用網(wǎng)絡(luò)爬蟲技術(shù)相比,其在網(wǎng)頁抓取時會對網(wǎng)頁內(nèi)容進(jìn)行篩選和處理,盡量保證僅抓取需要的相關(guān)信息。但在應(yīng)用過程中,其程序的編寫更加復(fù)雜。聚焦網(wǎng)絡(luò)爬蟲極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,能夠在海量數(shù)據(jù)中快速抓取有效數(shù)據(jù),并從有效數(shù)據(jù)中獲取用戶需要的信息,且能夠篩選和處理與主題無關(guān)的信息。由于保存的頁面數(shù)量少且更新速度快,其能夠更好地滿足特定人群對特定領(lǐng)域信息的需求。

Python是一種面向?qū)ο蟆⒔忉屝?、弱類型的腳本語言,也是一種功能強大且完善的通用型語言。相比于其他編程語言(如Java、C、C++等),Python的代碼非常簡單,提供了許多網(wǎng)絡(luò)爬蟲模塊和庫。這些類庫包括文件I/O、GUI、網(wǎng)絡(luò)編程、數(shù)據(jù)庫訪問、文本操作等絕大部分應(yīng)用場景,具有很好的擴展性。隨著大數(shù)據(jù)、人工智能技術(shù)的流行,Python的應(yīng)用領(lǐng)域?qū)⒏訌V泛。

1.2 Mitmproxy代理工具

Mitmproxy是一組工具,可為HTTP/1、HTTP/2和WebSocket提供交互式的、具有SSL/TLS功能的攔截代理。其功能包括:能夠完成攔截并動態(tài)修改HTTP、HTTPS的請求和響應(yīng);保存完整的HTTP對話,并進(jìn)行轉(zhuǎn)發(fā)和分析;轉(zhuǎn)發(fā)HTTP會話客戶端;轉(zhuǎn)發(fā)以前錄制的服務(wù)器的HTTP響應(yīng);反向代理模式將流量轉(zhuǎn)發(fā)到指定服務(wù)器;使用Python對HTTP流量進(jìn)行腳本化更改等功能。

1.3 Selenium測試框架

Selenium[3]是一個開源的、可移植的Web測試框架,支持多種操作系統(tǒng)、瀏覽器和編程語言,還支持并行測試執(zhí)行,在減少時間的同時提高了測試效率。Selenium Web驅(qū)動程序不需要安裝服務(wù)器,通過測試腳本直接與瀏覽器進(jìn)行交互。網(wǎng)絡(luò)爬蟲中使用Selenium驅(qū)動程序是為了解決Requests無法執(zhí)行JavaScript代碼的問題[4]。通過驅(qū)動瀏覽器自動執(zhí)行自定義腳本,模擬人工使用瀏覽器的操作[5],如跳轉(zhuǎn)、輸入、點擊、下拉等,進(jìn)而獲取網(wǎng)頁渲染后的結(jié)果。

1.4 JavaScript逆向技術(shù)

當(dāng)獲取網(wǎng)頁的HTML代碼后,部分網(wǎng)站運用調(diào)試檢測和數(shù)據(jù)加密等反爬蟲技術(shù),這些技術(shù)會阻礙下一步的網(wǎng)頁解析和運用,此時需要運用JavaScript逆向技術(shù)[6]來解析JavaScript代碼,解決網(wǎng)絡(luò)數(shù)據(jù)抓取時所遇到的調(diào)試檢測和數(shù)據(jù)加密等問題。

2 相關(guān)網(wǎng)絡(luò)反爬蟲技術(shù)

在相關(guān)網(wǎng)絡(luò)爬蟲技術(shù)發(fā)展的同時,反爬蟲技術(shù)[7]也在不斷發(fā)展,目前反爬蟲技術(shù)主要使用以下基本策略。

2.1 User-Agent控制請求

User-Agent中可以攜帶用戶設(shè)備信息,包括瀏覽器、操作系統(tǒng)、CPU等信息。通過在服務(wù)器中設(shè)置user-agent白名單,確保只有符合條件的user-agent才能訪問服務(wù)器。而網(wǎng)絡(luò)爬蟲技術(shù)可以通過偽造頭部信息來訪問服務(wù)器。

2.2 IP限制

通過設(shè)置服務(wù)器訪問閾值,將短時間內(nèi)訪問量超過閾值的IP地址加入黑名單中,禁止其訪問服務(wù)器,從而達(dá)到反爬蟲的目的。網(wǎng)絡(luò)爬蟲能夠利用IP代理來更換IP,從而能夠繼續(xù)訪問服務(wù)器。

2.3 Session訪問限制

Session是用戶請求服務(wù)器的憑證,在服務(wù)器端根據(jù)短時間內(nèi)的訪問量來判斷是否為網(wǎng)絡(luò)爬蟲,將疑似網(wǎng)絡(luò)爬蟲的Session禁用。通過網(wǎng)絡(luò)爬蟲技術(shù)可以注冊多個賬號,使用多個Session輪流對服務(wù)器進(jìn)行訪問,避免Session被禁用。

2.4 驗證碼

在用戶登錄或訪問某些重要信息時,可以使用圖片驗證碼、短信驗證碼、數(shù)值計算驗證碼、滑動驗證碼、圖案標(biāo)記驗證碼等檢測用戶的狀態(tài)。該方法能夠有效阻擋網(wǎng)絡(luò)爬蟲,區(qū)分程序和正常用戶,使正常用戶可以正常訪問服務(wù)器,而網(wǎng)絡(luò)爬蟲因無法識別驗證碼,使其不能訪問服務(wù)器。

2.5 動態(tài)加載數(shù)據(jù)

通過JavaScript技術(shù)動態(tài)加載數(shù)據(jù),網(wǎng)絡(luò)爬蟲在靜態(tài)頁面中無法獲得數(shù)據(jù)。網(wǎng)絡(luò)爬蟲技術(shù)能夠通過抓包的形式獲取URL,模擬請求。

2.6 數(shù)據(jù)加密

在前端請求服務(wù)器前,將相關(guān)參數(shù)進(jìn)行加密,使用加密后的參數(shù)請求服務(wù)器,在服務(wù)器端進(jìn)行相關(guān)解碼操作,而網(wǎng)絡(luò)爬蟲無法進(jìn)行模擬請求服務(wù)器。由于加密算法是寫在JavaScript代碼中,網(wǎng)絡(luò)爬蟲能夠找到并破解。

3 Python環(huán)境下Selenium與JavaScript逆向爬蟲技術(shù)的應(yīng)用

使用Mitmproxy開啟本地代理,進(jìn)行網(wǎng)頁響應(yīng)攔截。首先,創(chuàng)建addons.py文件。使用mitmweb-s addons.py命令啟動Mitmproxy并加載自定義腳本addons.py,修改網(wǎng)頁響應(yīng),繞過網(wǎng)站檢測(見圖1)。定義腳本文件代碼如下所示。

def response(slef,flow:mitmproxy.http.HTTPFlo-w):

if 'www.aqistudy.cn' in flow.request.url:

flow.response.text=flow.response.text.replace("window.navigator.webdriver", "false")

flow.response.text=flow.response.text.replace("debugger","")

其次,設(shè)置Firefox瀏覽器驅(qū)動器的環(huán)境:Firefox_options=webdriver.FirefoxOptions()。設(shè)置瀏覽器Firefoxd代理方式為使用本地代理,其代碼如下所示。

proxy_ip=“本地ip”

# 設(shè)置瀏覽器代理端口

ff_profile.set_preference("network.proxy.type",1)

ff_profile.set_preference("network.proxy.http",p-roxy_ip)

ff_profile.set_preference("network.proxy.http_p-ort",int(8080))

ff_profile.set_preference("network.proxy.ssl",p-roxy_ip)

ff_profile.set_preference("network.proxy.ssl_po-rt",int(8080))

ff_profile.set_preference("network.proxy.ftp",pr-oxy_ip)

ff_profile.set_preference("network.proxy.ftp_p-ort",int(8080))

最后,創(chuàng)建Firefox瀏覽器驅(qū)動器啟動Firefox[8](見圖2)。相關(guān)代碼如下所示。

browser=webdriver.Firefox(options=ff_profile)

4 以某環(huán)境質(zhì)量監(jiān)測網(wǎng)站進(jìn)行技術(shù)方法測試

針對某環(huán)境質(zhì)量監(jiān)測網(wǎng)站,首先使用逆向爬蟲技術(shù)解決該網(wǎng)站爬蟲調(diào)試中檢測和數(shù)據(jù)加密難題,然后使用網(wǎng)站解析工具BeautifulSoup對網(wǎng)頁結(jié)構(gòu)和屬性等進(jìn)行網(wǎng)頁解析[9]。圖3為該網(wǎng)站空氣質(zhì)量歷史數(shù)據(jù),根據(jù)其詳細(xì)信息頁面的<table>標(biāo)簽,通過select()獲取<table>整個標(biāo)簽內(nèi)容,調(diào)用函數(shù)Workbook()抽取所需要數(shù)據(jù)保存至Excel表[10-11](見表1)。

5 結(jié)語

本研究以某空氣質(zhì)量監(jiān)測反爬蟲分析平臺為例,基于Python環(huán)境,利用Selenium、JavaScript逆向爬取數(shù)據(jù)技術(shù),與中間人攻擊工具M(jìn)itmproxy開啟本地代理相結(jié)合,解決了網(wǎng)頁無法進(jìn)行調(diào)試的問題,從而突破網(wǎng)站的反爬蟲技術(shù)爬取到相關(guān)空氣質(zhì)量監(jiān)測數(shù)據(jù)。該方法能夠有針對性地分析并找到目標(biāo)網(wǎng)站反爬蟲技術(shù)漏洞進(jìn)行數(shù)據(jù)爬取,從而保證網(wǎng)絡(luò)爬蟲數(shù)據(jù)抓取的順利進(jìn)行。

參考文獻(xiàn):

[1] 周毅,寧亮,王鷗,等.基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究[J].現(xiàn)代信息科技,2021(21):149-151.

[2] 張俊威,肖瀟.基于Python爬蟲技術(shù)的網(wǎng)頁數(shù)據(jù)抓取與分析研究[J].信息系統(tǒng)工程,2021(2):155-156.

[3] 忽愛平,范伊紅,李陽,等.基于Selenium的網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)[J].無線互聯(lián)科技,2021(17):39-40.

[4] 李晨昊.基于BeautifulSoup+requests和selenium爬蟲網(wǎng)頁自動化處理的實現(xiàn)和性能對比[J].現(xiàn)代信息科技,2021(16):10-12,18.

[5] 許景賢,林錦程,程雨萌.Selenium框架的反爬蟲程序設(shè)計與實現(xiàn)[J].福建電腦,2021(1):26-29.

[6] 王朝陽,范伊紅,李夢丹,等.Python環(huán)境下的JavaScript逆向技術(shù)分析[J].無線互聯(lián)科技,2021(17):97-98.

[7] 張寶剛.基于Python的網(wǎng)絡(luò)爬蟲與反爬蟲技術(shù)的研究[J].電子世界,2021(4):86-87.

[8] 沈熠輝.以Selenium為核心的亞馬遜爬蟲與可視化[J].福建電腦,2021(12):43-46.

[9] 樊濤,趙征,劉敏娟.基于Selenium的網(wǎng)絡(luò)爬蟲分析與實現(xiàn)[J].電腦編程技巧與維護(hù),2019(9):155-156,170.

[10] 李曉宇,徐勇,汪倩,等.基于Selenium的淘寶商品評論爬蟲算法[J].信息與電腦(理論版),2020(12):62-64.

[11] 龍學(xué)磊,田萌,徐英,等.網(wǎng)絡(luò)爬蟲在科技文獻(xiàn)檢索中的應(yīng)用[J].現(xiàn)代信息科技,2021(24):150-152.

猜你喜歡
爬蟲逆向瀏覽器
逆向而行
對外直接投資逆向技術(shù)溢出的碳排放效應(yīng)
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
Python反爬蟲設(shè)計
微軟發(fā)布新Edge瀏覽器預(yù)覽版下載換裝Chrome內(nèi)核
基于Scrapy框架的分布式網(wǎng)絡(luò)爬蟲的研究與實現(xiàn)
誰搶走了低價機票
瀏覽器
lE8設(shè)置技巧大放送