亚洲精品不卡久久久久久_色视频线观看在线 _妽妽夹得我好舒服_国产真人一级a爱做片高潮_亚洲aⅴ无码专区在线观看q

當前位置: 首頁 >綜合 > 正文

淺談網(wǎng)絡(luò)爬蟲技術(shù)

2023-06-01 14:13:01 來源:中國保密協(xié)會科學(xué)技術(shù)分會
一、網(wǎng)絡(luò)爬蟲技術(shù)概述

網(wǎng)絡(luò)爬蟲又叫網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機器人等,可以將其理解為一個在互聯(lián)網(wǎng)上自動提取網(wǎng)頁信息并進行解析抓取的程序。網(wǎng)絡(luò)爬蟲不僅能夠復(fù)制網(wǎng)頁信息和下載音視頻,還可以做到行為鏈執(zhí)行與網(wǎng)站的模擬登錄。身處大數(shù)據(jù)時代,不論是人工智能還是數(shù)據(jù)分析,都需要有海量的數(shù)據(jù)在背后做支撐,如果單單是依靠人力去手工采集,不僅成本高昂而且效率低下,在這一需求下,自動化且高效可并發(fā)執(zhí)行的網(wǎng)絡(luò)爬蟲便擔起了獲取數(shù)據(jù)的重任。

二、網(wǎng)絡(luò)爬蟲基本原理

理論上來說,任何編程語言都可以用來編寫網(wǎng)絡(luò)爬蟲,只有難易之分。因為網(wǎng)絡(luò)爬蟲本質(zhì)上只是對目標服務(wù)器發(fā)起HTTP請求,并對HTTP響應(yīng)做出處理,提取關(guān)鍵信息進行清洗入庫。這里的服務(wù)器可以理解為要爬取的網(wǎng)站站點,爬蟲程序發(fā)起一次HTTP請求,網(wǎng)站服務(wù)器對請求做出一次響應(yīng),就構(gòu)成了一次網(wǎng)絡(luò)爬蟲行為,但是僅僅發(fā)起請求是不完整的,還需要將網(wǎng)站返回回來的信息進行數(shù)據(jù)解析和數(shù)據(jù)清洗,將最終需要的數(shù)據(jù)存儲到數(shù)據(jù)庫或是本地文件里才算是完成了一整套的爬蟲流程。

如圖1所示,完整的爬蟲流程應(yīng)當是編寫的網(wǎng)絡(luò)爬蟲在發(fā)起請求之后,目標服務(wù)器返回指定的請求響應(yīng),通過對請求響應(yīng)返回的響應(yīng)體進行解析,找到需要的信息進行數(shù)據(jù)存儲。如果需要翻頁或者進行跳轉(zhuǎn),則從當前頁面或者響應(yīng)體中提取出鏈接再次發(fā)起請求。


(資料圖)

圖 1 網(wǎng)絡(luò)爬蟲流程

通常來說,開發(fā)一個網(wǎng)絡(luò)爬蟲主要有兩個途徑,一個是根據(jù)請求包和解析包從頭開始爬蟲編寫,另一個是基于現(xiàn)行的爬蟲框架,進行框架化開發(fā)。

1.腳本編寫爬蟲

Python實現(xiàn)了許多第三方庫來幫開發(fā)者完成這個操作,比如github上開源的requests庫便是發(fā)起HTTP請求的利器,這就省去了實現(xiàn)請求程序的時間,bs4解析庫更是讓開發(fā)者只需要專注于網(wǎng)頁信息的定位,操作網(wǎng)站返回的主體信息就可以了。開發(fā)重心也就從協(xié)議處理轉(zhuǎn)化到了具體網(wǎng)頁的數(shù)據(jù)提取。不過如果爬蟲編寫者是要對有著反爬蟲措施的網(wǎng)站進行數(shù)據(jù)采集,則需要花費精力去應(yīng)對反爬蟲手段,諸如JavaScript逆向、代碼混淆或者指紋風(fēng)控之類的手段。

2.基于框架開發(fā)爬蟲

如今流行的網(wǎng)絡(luò)爬蟲框架Scrapy,其基于異步Twisted引擎,將爬蟲請求的每個階段都進行了拆分,并建立了鉤子能夠讓開發(fā)者在每一階段進行定制化開發(fā),可以大大加快網(wǎng)絡(luò)爬蟲的開發(fā)速度,并且其異步特性可以很好地實現(xiàn)并發(fā)爬取。

Scrapy框架模塊化和程序化的編寫方式,符合團隊合作的風(fēng)格,相較于腳本編寫爬蟲,更易于集體開發(fā)和維護。但缺點是需要進行第三方的拓展時不如直接進行腳本編寫方便,如今的爬蟲大多需要進行JS逆向、驗證碼識別之類的操作,外接其他編程語言進行開發(fā),這需要對Scrapy有著深入了解才能做到程序穩(wěn)定運行。

三、網(wǎng)絡(luò)爬蟲分類

實際開發(fā)中根據(jù)具體的代碼實現(xiàn)與爬蟲架構(gòu),網(wǎng)絡(luò)爬蟲可以被分為通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、增量式網(wǎng)絡(luò)爬蟲與深層網(wǎng)絡(luò)爬蟲。

1.通用網(wǎng)絡(luò)爬蟲(General Purpose Web Crawler)

通用網(wǎng)絡(luò)爬蟲又叫全網(wǎng)爬蟲,顧名思義,它的目標數(shù)據(jù)是整個互聯(lián)網(wǎng),爬取的數(shù)據(jù)極為豐富,因此常用于搜索引擎當中。它們往往從一些種子URL出發(fā),輾轉(zhuǎn)爬取最終拓展到整個網(wǎng)絡(luò)。在爬蟲流程里講過,一個爬蟲程序的設(shè)計離不開發(fā)起請求,解析頁面和內(nèi)容存儲三個方面。既然要存儲海量的互聯(lián)網(wǎng)數(shù)據(jù),那這類爬蟲對于爬蟲的性能和數(shù)據(jù)的存儲空間就會具有高要求,而且因為URL數(shù)量過多,通用網(wǎng)絡(luò)爬蟲常常會忽略爬行頁面的順序,并且采取并發(fā)的模式來提高爬取速度。

正是因為它要爬取海量的數(shù)據(jù),所以此類爬蟲的爬取策略常常需要進行嚴格的設(shè)計與實踐。就目前而言,深度優(yōu)先爬取策略和廣度優(yōu)先爬取策略是較為常見的。不過真正應(yīng)用于實踐當中的通用網(wǎng)絡(luò)爬蟲策略往往會非常復(fù)雜,并且穿插各類算法在其中。

(1) 深度優(yōu)先:按照頁面深度進行排序,一次訪問下一級URL,直到觸底無法深入。

(2) 廣度優(yōu)先:按照頁面內(nèi)容目錄層次進行劃分,爬取完同一層次的URL才會繼續(xù)進入下一層進行爬取。

2.聚焦網(wǎng)絡(luò)爬蟲(Focused Crawler)

聚焦網(wǎng)絡(luò)爬蟲更加適用于日常的爬蟲需求,并不需要爬蟲程序去獲取整個互聯(lián)網(wǎng)的資源,那是搜索引擎該做的事。它專注于某一主題,選擇性爬取網(wǎng)頁上與開發(fā)者已經(jīng)定義的規(guī)則相匹配的數(shù)據(jù)資源,能夠滿足對于特定網(wǎng)站或者領(lǐng)域的信息爬取工作。

聚焦網(wǎng)絡(luò)爬蟲的爬取策略有4種:

(1) 基于內(nèi)容評價:將用戶輸入的信息作為主題進行爬取,頁面包含用戶輸入信息則認為主題相關(guān)。

(2) 基于鏈接評價:根據(jù)頁面結(jié)構(gòu)信息分析爬取的URL重要性,根據(jù)重要程度進行爬取優(yōu)先級的排序。

(3) 基于增強學(xué)習(xí):利用概率統(tǒng)計中的貝葉斯分類器,根據(jù)網(wǎng)頁內(nèi)容和鏈接文本對URL進行分類,計算出URL的權(quán)重,以決定爬取順序。

(4) 基于語境圖:結(jié)合機器學(xué)習(xí)系統(tǒng),計算當前頁面到相關(guān)的網(wǎng)頁的距離,距離越近的頁面的URL訪問越優(yōu)先。

3.增量式網(wǎng)絡(luò)爬蟲(Incremental Web Crawler)

增量式網(wǎng)絡(luò)爬蟲主要目的是長久地維持一個數(shù)據(jù)庫,對于其中數(shù)據(jù)的穩(wěn)健性和實時性具有高要求。簡單來說,它對已經(jīng)爬取過的網(wǎng)頁頁面采取增量式更新,再次爬取的時候就會僅僅爬取新出現(xiàn)的或者發(fā)生改變的數(shù)據(jù),對于沒有發(fā)生變化的頁面或數(shù)據(jù)則不會爬取。

此類爬蟲常用的策略有三:

(1) 統(tǒng)一更新:每隔一段時間將所有的頁面再次訪問一遍,以達到更新數(shù)據(jù)的目的。

(2) 個體更新:根據(jù)個體網(wǎng)站的數(shù)據(jù)變化頻率來指定重新訪問的時間。

(3) 分類更新:將網(wǎng)頁區(qū)分為數(shù)據(jù)變化迅速的和數(shù)據(jù)變化緩慢的,以不同頻率訪問這兩類網(wǎng)頁。

4.深層網(wǎng)絡(luò)爬蟲(Deep Web Crawler)

深層網(wǎng)絡(luò)主要指的是沒辦法直接訪問到的頁面,這類網(wǎng)頁信息通常需要滿足一定的要求才可以瀏覽,隱藏在一些表單之后,不能通過靜態(tài)鏈接直接獲取。例如日常生活中遇到的一些必須登錄注冊后才可以訪問的網(wǎng)站便屬于深層網(wǎng)絡(luò)的范疇。這類爬蟲的需求也極其旺盛,不過只需要搭配GET和POST請求便可以訪問,主要難點在于破解POST提交信息時候的網(wǎng)頁數(shù)據(jù)加密,即JavaScript加密參數(shù)。

四、網(wǎng)絡(luò)爬蟲與搜索引擎

首先,搜索引擎的制作離不開網(wǎng)絡(luò)爬蟲,如百度搜索引擎又叫作百度爬蟲(BaiduSpider),谷歌搜索引擎又被稱為谷歌機器人(Googlebot),而且通用網(wǎng)絡(luò)爬蟲有時候也可以用來指代搜索引擎,是否搜索引擎就是網(wǎng)絡(luò)爬蟲呢?答案是否定的。搜索引擎是一項綜合性的技術(shù),網(wǎng)絡(luò)爬蟲是實現(xiàn)搜索引擎的比必不可少的一環(huán),爬蟲只為搜索引擎提供數(shù)據(jù),除此之外還有建立全文索引,進行倒排文件以及提供查詢服務(wù)等技術(shù)糅合在里邊。

除此之外,搜索引擎更關(guān)注的是大而全,為大多數(shù)用戶提供檢索服務(wù),所以有些冷門的沒有被列入索引的網(wǎng)站就沒辦法被實時獲取到,而網(wǎng)絡(luò)爬蟲則可以通過個人定制,爬取一些搜索引擎關(guān)照不到的地方,典型的案例便是深層網(wǎng)絡(luò)爬蟲以及在robots.txt中明確禁止搜索引擎爬取的網(wǎng)站,而理論上開發(fā)者編寫的網(wǎng)絡(luò)爬蟲可以到達世界上的任何網(wǎng)站。

雖然開發(fā)者日常編寫的網(wǎng)絡(luò)爬蟲遠不及搜索引擎那般復(fù)雜與精密,但是卻能夠讓人了解到搜索引擎內(nèi)部的工作原理。而且搜索引擎也可以看作是日常編寫的一個個定向聚焦的網(wǎng)絡(luò)爬蟲聚合而來的,當搜索引擎沒辦法完成定向的數(shù)據(jù)搜集工作的時候,編寫一個自己的網(wǎng)絡(luò)爬蟲就顯得極為重要了。

五、網(wǎng)絡(luò)爬蟲技術(shù)的危害

由于網(wǎng)絡(luò)爬蟲可以模擬正常用戶的訪問,所以可以完成下單購物、搶票秒殺等行為,而且其是從協(xié)議層面實現(xiàn)的,拋開了電腦端和移動端的一系列復(fù)雜行為,速度遠快于正常用戶,會擠占正常用戶的需求。此外,網(wǎng)絡(luò)爬蟲常被用來爬取公開的數(shù)據(jù),但是爬取行為依然會占用正常的服務(wù)器資源。而且許多爬蟲是追求效率的,是不加節(jié)制地,多線程、分布式地去進行數(shù)據(jù)爬取,對網(wǎng)站造成類似DDOS的攻擊,使得正常用戶也無法訪問到數(shù)據(jù)。

要從互聯(lián)網(wǎng)上根絕網(wǎng)絡(luò)爬蟲也是不可能的,因為網(wǎng)絡(luò)爬蟲已經(jīng)成為了互聯(lián)網(wǎng)生態(tài)的一部分,搜索引擎便是最大的網(wǎng)絡(luò)爬蟲。網(wǎng)站要防止的是來自個人或組織的不加節(jié)制的爬蟲行為,通過不斷提高爬蟲門檻,建立反爬蟲措施,可以很大程度增加網(wǎng)絡(luò)爬蟲的爬取成本,降低網(wǎng)絡(luò)爬蟲帶來的危害。

參考文獻

[1]Tianyi Ma,Ziyang Zhang. Medical Consultation System based on Python Web crawler[C]//.Proceedings of 2021 2nd International Conference on Electronics, Communications and Information Technology (CECIT 2021).,2021:772-776.DOI:10.26914/c.cnkihy.2021.065511.

[2]Addo Prince Clement,Dorgbefu Jnr. Maxwell,Kulbo Nora Bakabbey,Akpatsa Samuel Kofi,Ohemeng Asare Andy,Dagadu Joshua Caleb,Boansi Kufuor Oliver,Kofi Frimpong Adasa Nkrumah. Video Ads in Digital Marketing and Sales: A Big Data Analytics Using Scrapy Web Crawler Mining Technique[J]. Asian Journal of Research in Computer Science,2021.

[3]Ma Xiaoju,Yan Min. Design and Implementation of Craweper Based on Scrapy[J]. Journal of Physics: Conference Series,2021,2033(1).

[4]Deng Kaiying,Chen Senpeng,Deng Jingwei. On optimisation of web crawler system on Scrapy framework[J]. International Journal of Wireless and Mobile Computing,2020,18(4).

[5]Wang Wei,Yu Lihua. UCrawler: A learning-based web crawler using a URL knowledge base[J]. Journal of Computational Methods in Sciences and Engineering,2021,21(2).

標簽:

返回頂部