最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python網(wǎng)絡(luò)爬蟲的基本原理解析

 更新時(shí)間:2023年05月18日 10:30:38   作者:FLy_鵬程萬里  
如果要獲取網(wǎng)絡(luò)上數(shù)據(jù),我們要給爬蟲一個(gè)網(wǎng)址(程序中通常叫URL),爬蟲發(fā)送一個(gè)HTTP請(qǐng)求給目標(biāo)網(wǎng)頁的服務(wù)器,服務(wù)器返回?cái)?shù)據(jù)給客戶端(也就是我們的爬蟲),爬蟲再進(jìn)行數(shù)據(jù)解析、保存等一系列操作,需要的朋友可以參考下

網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。爬蟲的主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地形成一個(gè)或聯(lián)網(wǎng)內(nèi)容的鏡像備份。這篇博客主要對(duì)爬蟲以及抓取系統(tǒng)進(jìn)行一個(gè)簡(jiǎn)單的概述。

一、網(wǎng)絡(luò)爬蟲的基本結(jié)構(gòu)及工作流程

一個(gè)通用的網(wǎng)絡(luò)爬蟲的框架如圖所示:

網(wǎng)絡(luò)爬蟲的基本工作流程如下:

1.首先選取一部分精心挑選的種子URL;

2.將這些URL放入待抓取URL隊(duì)列;

3.從待抓取URL隊(duì)列中取出待抓取在URL,解析DNS,并且得到主機(jī)的ip,并將URL對(duì)應(yīng)的網(wǎng)頁下載下來,存儲(chǔ)進(jìn)已下載網(wǎng)頁庫中。此外,將這些URL放進(jìn)已抓取URL隊(duì)列。

4.分析已抓取URL隊(duì)列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊(duì)列,從而進(jìn)入下一個(gè)循環(huán)。

二、從爬蟲的角度對(duì)互聯(lián)網(wǎng)進(jìn)行劃分

對(duì)應(yīng)的,可以將互聯(lián)網(wǎng)的所有頁面分為五個(gè)部分:

1.已下載未過期網(wǎng)頁

2.已下載已過期網(wǎng)頁:抓取到的網(wǎng)頁實(shí)際上是互聯(lián)網(wǎng)內(nèi)容的一個(gè)鏡像與備份,互聯(lián)網(wǎng)是動(dòng)態(tài)變化的,一部分互聯(lián)網(wǎng)上的內(nèi)容已經(jīng)發(fā)生了變化,這時(shí),這部分抓取到的網(wǎng)頁就已經(jīng)過期了。

3.待下載網(wǎng)頁:也就是待抓取URL隊(duì)列中的那些頁面

4.可知網(wǎng)頁:還沒有抓取下來,也沒有在待抓取URL隊(duì)列中,但是可以通過對(duì)已抓取頁面或者待抓取URL對(duì)應(yīng)頁面進(jìn)行分析獲取到的URL,認(rèn)為是可知網(wǎng)頁。

5.還有一部分網(wǎng)頁,爬蟲是無法直接抓取下載的。稱為不可知網(wǎng)頁。

三、抓取策略

在爬蟲系統(tǒng)中,待抓取URL隊(duì)列是很重要的一部分。待抓取URL隊(duì)列中的URL以什么樣的順序排列也是一個(gè)很重要的問題,因?yàn)檫@涉及到先抓取那個(gè)頁面,后抓取哪個(gè)頁面。而決定這些URL排列順序的方法,叫做抓取策略。下面重點(diǎn)介紹幾種常見的抓取策略:

1.深度優(yōu)先遍歷策略

深度優(yōu)先遍歷策略是指網(wǎng)絡(luò)爬蟲會(huì)從起始頁開始,一個(gè)鏈接一個(gè)鏈接跟蹤下去,處理完這條線路之后再轉(zhuǎn)入下一個(gè)起始頁,繼續(xù)跟蹤鏈接。我們以下面的圖為例:

遍歷的路徑:A-F-GE-H-I B C D

2.寬度優(yōu)先遍歷策略

寬度優(yōu)先遍歷策略的基本思路是,將新下載網(wǎng)頁中發(fā)現(xiàn)的鏈接直接插入待抓取URL隊(duì)列的末尾。也就是指網(wǎng)絡(luò)爬蟲會(huì)先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中的一個(gè)鏈接網(wǎng)頁,繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。還是以上面的圖為例:

遍歷路徑:A-B-C-D-E-F G H I

3.反向鏈接數(shù)策略

反向鏈接數(shù)是指一個(gè)網(wǎng)頁被其他網(wǎng)頁鏈接指向的數(shù)量。反向鏈接數(shù)表示的是一個(gè)網(wǎng)頁的內(nèi)容受到其他人的推薦的程度。因此,很多時(shí)候搜索引擎的抓取系統(tǒng)會(huì)使用這個(gè)指標(biāo)來評(píng)價(jià)網(wǎng)頁的重要程度,從而決定不同網(wǎng)頁的抓取先后順序。

在真實(shí)的網(wǎng)絡(luò)環(huán)境中,由于廣告鏈接、作弊鏈接的存在,反向鏈接數(shù)不能完全等他我那個(gè)也的重要程度。因此,搜索引擎往往考慮一些可靠的反向鏈接數(shù)。

4.Partial PageRank策略

Partial PageRank算法借鑒了PageRank算法的思想:對(duì)于已經(jīng)下載的網(wǎng)頁,連同待抓取URL隊(duì)列中的URL,形成網(wǎng)頁集合,計(jì)算每個(gè)頁面的PageRank值,計(jì)算完之后,將待抓取URL隊(duì)列中的URL按照PageRank值的大小排列,并按照該順序抓取頁面。

如果每次抓取一個(gè)頁面,就重新計(jì)算PageRank值,一種折中方案是:每抓取K個(gè)頁面后,重新計(jì)算一次PageRank值。但是這種情況還會(huì)有一個(gè)問題:對(duì)于已經(jīng)下載下來的頁面中分析出的鏈接,也就是我們之前提到的未知網(wǎng)頁那一部分,暫時(shí)是沒有PageRank值的。為了解決這個(gè)問題,會(huì)給這些頁面一個(gè)臨時(shí)的PageRank值:將這個(gè)網(wǎng)頁所有入鏈傳遞進(jìn)來的PageRank值進(jìn)行匯總,這樣就形成了該未知頁面的PageRank值,從而參與排序。下面舉例說明:

5.OPIC策略策略

該算法實(shí)際上也是對(duì)頁面進(jìn)行一個(gè)重要性打分。在算法開始前,給所有頁面一個(gè)相同的初始現(xiàn)金(cash)。當(dāng)下載了某個(gè)頁面P之后,將P的現(xiàn)金分?jǐn)偨o所有從P中分析出的鏈接,并且將P的現(xiàn)金清空。對(duì)于待抓取URL隊(duì)列中的所有頁面按照現(xiàn)金數(shù)進(jìn)行排序。

6.大站優(yōu)先策略

對(duì)于待抓取URL隊(duì)列中的所有網(wǎng)頁,根據(jù)所屬的網(wǎng)站進(jìn)行分類。對(duì)于待下載頁面數(shù)多的網(wǎng)站,優(yōu)先下載。這個(gè)策略也因此叫做大站優(yōu)先策略。

四、更新策略

互聯(lián)網(wǎng)是實(shí)時(shí)變化的,具有很強(qiáng)的動(dòng)態(tài)性。網(wǎng)頁更新策略主要是決定何時(shí)更新之前已經(jīng)下載過的頁面。常見的更新策略又以下三種:

1.歷史參考策略

顧名思義,根據(jù)頁面以往的歷史更新數(shù)據(jù),預(yù)測(cè)該頁面未來何時(shí)會(huì)發(fā)生變化。一般來說,是通過泊松過程進(jìn)行建模進(jìn)行預(yù)測(cè)。

2.用戶體驗(yàn)策略

盡管搜索引擎針對(duì)于某個(gè)查詢條件能夠返回?cái)?shù)量巨大的結(jié)果,但是用戶往往只關(guān)注前幾頁結(jié)果。因此,抓取系統(tǒng)可以優(yōu)先更新那些現(xiàn)實(shí)在查詢結(jié)果前幾頁中的網(wǎng)頁,而后再更新那些后面的網(wǎng)頁。這種更新策略也是需要用到歷史信息的。用戶體驗(yàn)策略保留網(wǎng)頁的多個(gè)歷史版本,并且根據(jù)過去每次內(nèi)容變化對(duì)搜索質(zhì)量的影響,得出一個(gè)平均值,用這個(gè)值作為決定何時(shí)重新抓取的依據(jù)。

3.聚類抽樣策略

前面提到的兩種更新策略都有一個(gè)前提:需要網(wǎng)頁的歷史信息。這樣就存在兩個(gè)問題:第一,系統(tǒng)要是為每個(gè)系統(tǒng)保存多個(gè)版本的歷史信息,無疑增加了很多的系統(tǒng)負(fù)擔(dān);第二,要是新的網(wǎng)頁完全沒有歷史信息,就無法確定更新策略。

這種策略認(rèn)為,網(wǎng)頁具有很多屬性,類似屬性的網(wǎng)頁,可以認(rèn)為其更新頻率也是類似的。要計(jì)算某一個(gè)類別網(wǎng)頁的更新頻率,只需要對(duì)這一類網(wǎng)頁抽樣,以他們的更新周期作為整個(gè)類別的更新周期?;舅悸啡鐖D:

五、分布式抓取系統(tǒng)結(jié)構(gòu)

一般來說,抓取系統(tǒng)需要面對(duì)的是整個(gè)互聯(lián)網(wǎng)上數(shù)以億計(jì)的網(wǎng)頁。單個(gè)抓取程序不可能完成這樣的任務(wù)。往往需要多個(gè)抓取程序一起來處理。一般來說抓取系統(tǒng)往往是一個(gè)分布式的三層結(jié)構(gòu)。如圖所示:

最下一層是分布在不同地理位置的數(shù)據(jù)中心,在每個(gè)數(shù)據(jù)中心里有若干臺(tái)抓取服務(wù)器,而每臺(tái)抓取服務(wù)器上可能部署了若干套爬蟲程序。這就構(gòu)成了一個(gè)基本的分布式抓取系統(tǒng)。

對(duì)于一個(gè)數(shù)據(jù)中心內(nèi)的不同抓去服務(wù)器,協(xié)同工作的方式有幾種:

1.主從式(Master-Slave)

主從式基本結(jié)構(gòu)如圖所示:

對(duì)于主從式而言,有一臺(tái)專門的Master服務(wù)器來維護(hù)待抓取URL隊(duì)列,它負(fù)責(zé)每次將URL分發(fā)到不同的Slave服務(wù)器,而Slave服務(wù)器則負(fù)責(zé)實(shí)際的網(wǎng)頁下載工作。Master服務(wù)器除了維護(hù)待抓取URL隊(duì)列以及分發(fā)URL之外,還要負(fù)責(zé)調(diào)解各個(gè)Slave服務(wù)器的負(fù)載情況。以免某些Slave服務(wù)器過于清閑或者勞累。

這種模式下,Master往往容易成為系統(tǒng)瓶頸。

2.對(duì)等式(Peer toPeer)

對(duì)等式的基本結(jié)構(gòu)如圖所示:

在這種模式下,所有的抓取服務(wù)器在分工上沒有不同。每一臺(tái)抓取服務(wù)器都可以從待抓取在URL隊(duì)列中獲取URL,然后對(duì)該URL的主域名的hash值H,然后計(jì)算H mod m(其中m是服務(wù)器的數(shù)量,以上圖為例,m為3),計(jì)算得到的數(shù)就是處理該URL的主機(jī)編號(hào)。

舉例:假設(shè)對(duì)于URLwww.baidu.com,計(jì)算器hash值H=8,m=3,則H mod m=2,因此由編號(hào)為2的服務(wù)器進(jìn)行該鏈接的抓取。假設(shè)這時(shí)候是0號(hào)服務(wù)器拿到這個(gè)URL,那么它將該URL轉(zhuǎn)給服務(wù)器2,由服務(wù)器2進(jìn)行抓取。

這種模式有一個(gè)問題,當(dāng)有一臺(tái)服務(wù)器死機(jī)或者添加新的服務(wù)器,那么所有URL的哈希求余的結(jié)果就都要變化。也就是說,這種方式的擴(kuò)展性不佳。針對(duì)這種情況,又有一種改進(jìn)方案被提出來。這種改進(jìn)的方案是一致性哈希法來確定服務(wù)器分工。其基本結(jié)構(gòu)如圖所示:

一致性哈希將URL的主域名進(jìn)行哈希運(yùn)算,映射為一個(gè)范圍在0-232之間的某個(gè)數(shù)。而將這個(gè)范圍平均的分配給m臺(tái)服務(wù)器,根據(jù)URL主域名哈希運(yùn)算的值所處的范圍判斷是哪臺(tái)服務(wù)器來進(jìn)行抓取。

如果某一臺(tái)服務(wù)器出現(xiàn)問題,那么本該由該服務(wù)器負(fù)責(zé)的網(wǎng)頁則按照順時(shí)針順延,由下一臺(tái)服務(wù)器進(jìn)行抓取。這樣的話,及時(shí)某臺(tái)服務(wù)器出現(xiàn)問題,也不會(huì)影響其他的工作。

到此這篇關(guān)于Python網(wǎng)絡(luò)爬蟲的基本原理解析的文章就介紹到這了,更多相關(guān)Python爬蟲基本原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 人工智能深度學(xué)習(xí)OpenAI?baselines的使用方法

    人工智能深度學(xué)習(xí)OpenAI?baselines的使用方法

    這篇文章主要為大家介紹了人工智能深度學(xué)習(xí)OpenAI?baselines的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式分析

    Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式分析

    這篇文章主要介紹了Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python自定義函數(shù)相關(guān)的參數(shù)、默認(rèn)值、隱函數(shù)等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • 基于Python實(shí)現(xiàn)HTML轉(zhuǎn)Markdown格式的小工具

    基于Python實(shí)現(xiàn)HTML轉(zhuǎn)Markdown格式的小工具

    在現(xiàn)代文檔處理和內(nèi)容創(chuàng)作中,HTML 和 Markdown 是兩種廣泛使用的格式,本文將介紹一個(gè)基于 Python 的 HTML 到 Markdown 轉(zhuǎn)換工具,希望對(duì)大家有所幫助
    2025-07-07
  • Python列表append和+的區(qū)別淺析

    Python列表append和+的區(qū)別淺析

    這篇文章主要介紹了Python列表append和+的區(qū)別淺析,本文得出一的結(jié)論是使用append實(shí)際是修改一個(gè)列表,使用+實(shí)際是創(chuàng)建一個(gè)新的列表,需要的朋友可以參考下
    2015-02-02
  • pandas DataFrame truediv的具體使用

    pandas DataFrame truediv的具體使用

    本文主要介紹了pandas DataFrame truediv的具體使用,該方法用于執(zhí)行逐元素的真除法操作,下面就來具體介紹一下,感興趣的可以了解一下
    2025-04-04
  • Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例

    Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例

    今天小編就為大家分享一篇Python 確定多項(xiàng)式擬合/回歸的階數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 基于python的列表list和集合set操作

    基于python的列表list和集合set操作

    今天小編就為大家分享一篇基于python的列表list和集合set操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python常用的魔法方法(雙下劃線)

    python常用的魔法方法(雙下劃線)

    本文介紹一下python中常用的魔法方法以及面向?qū)ο笾蟹浅V匾膯卫J?。具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • 使用VLC實(shí)現(xiàn)自動(dòng)播放視頻的操作方法

    使用VLC實(shí)現(xiàn)自動(dòng)播放視頻的操作方法

    VLC是一款開源的多媒體播放器,它支持大量的視頻和音頻格式,并且具有強(qiáng)大的腳本和編程接口,這篇文章主要介紹了使用VLC實(shí)現(xiàn)自動(dòng)播放視頻,需要的朋友可以參考下
    2024-03-03
  • 如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換

    如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換

    這篇文章主要介紹了如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

泗洪县| 东乌珠穆沁旗| 武汉市| 韶关市| 湟源县| 海伦市| 腾冲县| 原平市| 房山区| 新巴尔虎左旗| 平南县| 扎囊县| 崇信县| 长寿区| 镇平县| 永丰县| 海阳市| 郴州市| 海安县| 汾阳市| 加查县| 彭州市| 嘉黎县| 虞城县| 玉树县| 周宁县| 河北区| 曲松县| 平阳县| 哈巴河县| 浏阳市| 洪泽县| 神农架林区| 洪湖市| 玉田县| 色达县| 鹤岗市| 荥经县| 大城县| 孟津县| 广安市|