時春波 李衛東 秦丹陽 張海嘯 吳崢嶸
摘 要:針對使用調試檢測、數據加密等技術的網站,解析工具Beautiful Soup難以對網頁進行解析爬取數據。本研究基于Python環境,結合JavaScript逆向技術、Beautiful Soup網頁解析等網絡爬蟲技術,利用中間人攻擊工具Mitmproxy(man-in-the-middle attack proxy)在本地指定設備端口開啟本地代理,攔截并修改網頁響應。同時,運用Web自動化工具Selenium來啟動瀏覽器,設置使用代理服務器,連接到本地Mitmproxy代理,訪問被修改的響應網頁進行網頁調試和解析,并對加密數據進行還原,解決網絡爬蟲中調試檢測和數據加密難題,從而爬取數據。
關鍵詞:網絡爬蟲;JavaScript逆向技術;網絡代理;Selenium
中圖分類號:TP393.092 ? ? 文獻標志碼: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 引言
隨著網絡技術的迅速發展,萬維網成為大量信息的載體,如何有效提取并利用這些海量信息成為一個巨大挑戰。爬蟲技術就是在這樣背景下誕生的,其不僅在搜索引擎領域得到廣泛應用,在大數據分析、商業等領域也得到了大規模應用。隨著網絡反爬蟲技術[1]的發展,爬取數據也越來越困難。本研究針對網絡爬蟲中調試檢測和數據加密等反爬蟲技術,使用Python爬蟲技術,結合Selenium和JavaScript逆向技術,加入Mitmproxy進行網頁響應攔截和修改,解決網絡爬蟲中調試檢測和數據加密難題,從而爬取數據。
1 相關網絡爬蟲技術
1.1 Python爬蟲技術
網絡爬蟲[2]又稱網絡蜘蛛、網絡機器人,是一種按照一定規則自動瀏覽、檢索網頁信息的程序或腳本。網絡爬蟲能夠自動請求網頁,并將所需要的數據抓取出來。通過對抓取到的數據進行處理,從而提取出有價值的信息。
網絡爬蟲可分為三大類,分別是通用網絡爬蟲、聚焦網絡爬蟲和增量式網絡爬蟲。通用網絡爬蟲是搜索引擎的重要組成部分,須遵守Robots協議。在應用過程中,通用網絡爬蟲一般會從初始UR開始,獲取初始頁面的代碼,同時會從代碼提取所需的URL,并將其放入列表中,直到其滿足停止條件;增量式網絡爬蟲是指對已下載網頁采取增量式更新方式,只爬取新產生或發生變化的網頁,能夠在一定程度上保證所爬取數據的時效性;聚焦網絡爬蟲是面向特定需求的一種網絡爬蟲程序,與通用網絡爬蟲技術相比,其在網頁抓取時會對網頁內容進行篩選和處理,盡量保證僅抓取需要的相關信息。但在應用過程中,其程序的編寫更加復雜。聚焦網絡爬蟲極大地節省了硬件和網絡資源,能夠在海量數據中快速抓取有效數據,并從有效數據中獲取用戶需要的信息,且能夠篩選和處理與主題無關的信息。由于保存的頁面數量少且更新速度快,其能夠更好地滿足特定人群對特定領域信息的需求。
Python是一種面向對象、解釋型、弱類型的腳本語言,也是一種功能強大且完善的通用型語言。相比于其他編程語言(如Java、C、C++等),Python的代碼非常簡單,提供了許多網絡爬蟲模塊和庫。這些類庫包括文件I/O、GUI、網絡編程、數據庫訪問、文本操作等絕大部分應用場景,具有很好的擴展性。隨著大數據、人工智能技術的流行,Python的應用領域將更加廣泛。
1.2 Mitmproxy代理工具
Mitmproxy是一組工具,可為HTTP/1、HTTP/2和WebSocket提供交互式的、具有SSL/TLS功能的攔截代理。其功能包括:能夠完成攔截并動態修改HTTP、HTTPS的請求和響應;保存完整的HTTP對話,并進行轉發和分析;轉發HTTP會話客戶端;轉發以前錄制的服務器的HTTP響應;反向代理模式將流量轉發到指定服務器;使用Python對HTTP流量進行腳本化更改等功能。
1.3 Selenium測試框架
Selenium[3]是一個開源的、可移植的Web測試框架,支持多種操作系統、瀏覽器和編程語言,還支持并行測試執行,在減少時間的同時提高了測試效率。Selenium Web驅動程序不需要安裝服務器,通過測試腳本直接與瀏覽器進行交互。網絡爬蟲中使用Selenium驅動程序是為了解決Requests無法執行JavaScript代碼的問題[4]。通過驅動瀏覽器自動執行自定義腳本,模擬人工使用瀏覽器的操作[5],如跳轉、輸入、點擊、下拉等,進而獲取網頁渲染后的結果。
1.4 JavaScript逆向技術
當獲取網頁的HTML代碼后,部分網站運用調試檢測和數據加密等反爬蟲技術,這些技術會阻礙下一步的網頁解析和運用,此時需要運用JavaScript逆向技術[6]來解析JavaScript代碼,解決網絡數據抓取時所遇到的調試檢測和數據加密等問題。
2 相關網絡反爬蟲技術
在相關網絡爬蟲技術發展的同時,反爬蟲技術[7]也在不斷發展,目前反爬蟲技術主要使用以下基本策略。
2.1 User-Agent控制請求
User-Agent中可以攜帶用戶設備信息,包括瀏覽器、操作系統、CPU等信息。通過在服務器中設置user-agent白名單,確保只有符合條件的user-agent才能訪問服務器。而網絡爬蟲技術可以通過偽造頭部信息來訪問服務器。
2.2 IP限制
通過設置服務器訪問閾值,將短時間內訪問量超過閾值的IP地址加入黑名單中,禁止其訪問服務器,從而達到反爬蟲的目的。網絡爬蟲能夠利用IP代理來更換IP,從而能夠繼續訪問服務器。
2.3 Session訪問限制
Session是用戶請求服務器的憑證,在服務器端根據短時間內的訪問量來判斷是否為網絡爬蟲,將疑似網絡爬蟲的Session禁用。通過網絡爬蟲技術可以注冊多個賬號,使用多個Session輪流對服務器進行訪問,避免Session被禁用。
2.4 驗證碼
在用戶登錄或訪問某些重要信息時,可以使用圖片驗證碼、短信驗證碼、數值計算驗證碼、滑動驗證碼、圖案標記驗證碼等檢測用戶的狀態。該方法能夠有效阻擋網絡爬蟲,區分程序和正常用戶,使正常用戶可以正常訪問服務器,而網絡爬蟲因無法識別驗證碼,使其不能訪問服務器。
2.5 動態加載數據
通過JavaScript技術動態加載數據,網絡爬蟲在靜態頁面中無法獲得數據。網絡爬蟲技術能夠通過抓包的形式獲取URL,模擬請求。
2.6 數據加密
在前端請求服務器前,將相關參數進行加密,使用加密后的參數請求服務器,在服務器端進行相關解碼操作,而網絡爬蟲無法進行模擬請求服務器。由于加密算法是寫在JavaScript代碼中,網絡爬蟲能夠找到并破解。
3 Python環境下Selenium與JavaScript逆向爬蟲技術的應用
使用Mitmproxy開啟本地代理,進行網頁響應攔截。首先,創建addons.py文件。使用mitmweb-s addons.py命令啟動Mitmproxy并加載自定義腳本addons.py,修改網頁響應,繞過網站檢測(見圖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","")
其次,設置Firefox瀏覽器驅動器的環境:Firefox_options=webdriver.FirefoxOptions()。設置瀏覽器Firefoxd代理方式為使用本地代理,其代碼如下所示。
proxy_ip=“本地ip”
# 設置瀏覽器代理端口
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))
最后,創建Firefox瀏覽器驅動器啟動Firefox[8](見圖2)。相關代碼如下所示。
browser=webdriver.Firefox(options=ff_profile)
4 以某環境質量監測網站進行技術方法測試
針對某環境質量監測網站,首先使用逆向爬蟲技術解決該網站爬蟲調試中檢測和數據加密難題,然后使用網站解析工具BeautifulSoup對網頁結構和屬性等進行網頁解析[9]。圖3為該網站空氣質量歷史數據,根據其詳細信息頁面的<table>標簽,通過select()獲取<table>整個標簽內容,調用函數Workbook()抽取所需要數據保存至Excel表[10-11](見表1)。
5 結語
本研究以某空氣質量監測反爬蟲分析平臺為例,基于Python環境,利用Selenium、JavaScript逆向爬取數據技術,與中間人攻擊工具Mitmproxy開啟本地代理相結合,解決了網頁無法進行調試的問題,從而突破網站的反爬蟲技術爬取到相關空氣質量監測數據。該方法能夠有針對性地分析并找到目標網站反爬蟲技術漏洞進行數據爬取,從而保證網絡爬蟲數據抓取的順利進行。
參考文獻:
[1] 周毅,寧亮,王鷗,等.基于Python的網絡爬蟲和反爬蟲技術研究[J].現代信息科技,2021(21):149-151.
[2] 張俊威,肖瀟.基于Python爬蟲技術的網頁數據抓取與分析研究[J].信息系統工程,2021(2):155-156.
[3] 忽愛平,范伊紅,李陽,等.基于Selenium的網絡爬蟲的設計與實現[J].無線互聯科技,2021(17):39-40.
[4] 李晨昊.基于BeautifulSoup+requests和selenium爬蟲網頁自動化處理的實現和性能對比[J].現代信息科技,2021(16):10-12,18.
[5] 許景賢,林錦程,程雨萌.Selenium框架的反爬蟲程序設計與實現[J].福建電腦,2021(1):26-29.
[6] 王朝陽,范伊紅,李夢丹,等.Python環境下的JavaScript逆向技術分析[J].無線互聯科技,2021(17):97-98.
[7] 張寶剛.基于Python的網絡爬蟲與反爬蟲技術的研究[J].電子世界,2021(4):86-87.
[8] 沈熠輝.以Selenium為核心的亞馬遜爬蟲與可視化[J].福建電腦,2021(12):43-46.
[9] 樊濤,趙征,劉敏娟.基于Selenium的網絡爬蟲分析與實現[J].電腦編程技巧與維護,2019(9):155-156,170.
[10] 李曉宇,徐勇,汪倩,等.基于Selenium的淘寶商品評論爬蟲算法[J].信息與電腦(理論版),2020(12):62-64.
[11] 龍學磊,田萌,徐英,等.網絡爬蟲在科技文獻檢索中的應用[J].現代信息科技,2021(24):150-152.