python爬蟲設(shè)計(jì)入門_第1頁
python爬蟲設(shè)計(jì)入門_第2頁
python爬蟲設(shè)計(jì)入門_第3頁
python爬蟲設(shè)計(jì)入門_第4頁
python爬蟲設(shè)計(jì)入門_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python爬蟲設(shè)計(jì)入門

重慶大學(xué)軟件效勞工程實(shí)驗(yàn)室余俊良UsingPythonToDesignACrawlerSummarize根本的爬蟲工作原理簡(jiǎn)單爬蟲設(shè)計(jì)入門庫:下載網(wǎng)頁:urllib,Requests解析網(wǎng)頁:BeautifulSoup模擬交互,處理JS動(dòng)態(tài)網(wǎng)頁:Selenium高級(jí)爬蟲框架Scrapy分布式爬蟲設(shè)計(jì)分布式隊(duì)列布隆過濾器(BloomFilter)網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)提取網(wǎng)頁的程序,它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁,是搜索引擎的重要組成。傳統(tǒng)爬蟲從一個(gè)或假設(shè)干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件。什么是爬蟲批量型爬蟲批量型爬蟲有明確的抓取范圍和目標(biāo),當(dāng)爬蟲到達(dá)這個(gè)設(shè)定的目標(biāo)后,即停止抓取過程。增量型爬蟲增量型爬蟲會(huì)持續(xù)不斷的抓取,對(duì)于抓取的網(wǎng)頁,要定期更新。通用的商業(yè)搜索引擎爬蟲根本都屬于此類。垂直型爬蟲垂直型爬蟲關(guān)注特定主題內(nèi)容或者屬于特定行業(yè)的網(wǎng)頁,其他主題或者其他行業(yè)的內(nèi)容不再考慮范圍。爬蟲的分類通用爬蟲框架根本工作流程網(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ì)互聯(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)先遍歷策略

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

3.反向鏈接數(shù)策略4.PartialPageRank策略抓取策略depth-first:遍歷的路徑:A-F-G

E-H-IBCDbreadth-first:遍歷的路徑:A-B-C-D-E-FGHI網(wǎng)頁更新策略

互聯(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è)。網(wǎng)頁更新策略

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

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

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è)類別的更新周期。分布式抓取系統(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)。如下圖:分布式抓取系統(tǒng)結(jié)構(gòu)

最下一層是分布在不同地理位置的數(shù)據(jù)中心,在每個(gè)數(shù)據(jù)中心里有假設(shè)干臺(tái)抓取效勞器,而每臺(tái)抓取效勞器上可能部署了假設(shè)干套爬蟲程序。這就構(gòu)成了一個(gè)根本的分布式抓取系統(tǒng)。對(duì)于一個(gè)數(shù)據(jù)中心內(nèi)的不同抓去效勞器,協(xié)同工作的方式有幾種:1.主從式〔Master-Slave〕

2.對(duì)等式〔PeertoPeer〕主從式抓取系統(tǒng)結(jié)構(gòu)主從式抓取系統(tǒng)結(jié)構(gòu)對(duì)于主從式而言,有一臺(tái)專門的Master效勞器來維護(hù)待抓取URL隊(duì)列,它負(fù)責(zé)每次將URL分發(fā)到不同的Slave效勞器,而Slave效勞器那么負(fù)責(zé)實(shí)際的網(wǎng)頁下載工作。Master效勞器除了維護(hù)待抓取URL隊(duì)列以及分發(fā)URL之外,還要負(fù)責(zé)調(diào)解各個(gè)Slave效勞器的負(fù)載情況。以免某些Slave效勞器過于清閑或者勞累。這種模式下,Master往往容易成為系統(tǒng)瓶頸。對(duì)等式抓取系統(tǒng)結(jié)構(gòu)對(duì)等式抓取系統(tǒng)結(jié)構(gòu)

在這種模式下,所有的抓取效勞器在分工上沒有不同。每一臺(tái)抓取效勞器都可以從待抓取在URL隊(duì)列中獲取URL,然后對(duì)該URL的主域名的hash值H,然后計(jì)算Hmodm〔其中m是效勞器的數(shù)量,以上圖為例,m為3〕,計(jì)算得到的數(shù)就是處理該URL的主機(jī)編號(hào)。這種模式有一個(gè)問題,當(dāng)有一臺(tái)效勞器死機(jī)或者添加新的效勞器,那么所有URL的哈希求余的結(jié)果就都要變化。也就是說,這種方式的擴(kuò)展性不佳。對(duì)等式抓取系統(tǒng)結(jié)構(gòu)

在這種模式下,所有的抓取效勞器在分工上沒有不同。每一臺(tái)抓取效勞器都可以從待抓取在URL隊(duì)列中獲取URL,然后對(duì)該URL的主域名的hash值H,然后計(jì)算Hmodm〔其中m是效勞器的數(shù)量,以上圖為例,m為3〕,計(jì)算得到的數(shù)就是處理該URL的主機(jī)編號(hào)。這種模式有一個(gè)問題,當(dāng)有一臺(tái)效勞器死機(jī)或者添加新的效勞器,那么所有URL的哈希求余的結(jié)果就都要變化。也就是說,這種方式的擴(kuò)展性不佳。布隆過濾器在構(gòu)建分布式爬蟲時(shí)抓取海量網(wǎng)頁時(shí),通常需要維護(hù)一個(gè)很長(zhǎng)的已抓取URL集合,防止重復(fù)抓取已經(jīng)下載過的網(wǎng)頁。然而即使使用哈希表來構(gòu)建這個(gè)集合,依然面臨著沖突和內(nèi)存利用率不高的缺點(diǎn)。通常的判重做法是使用BloomFilter〔布隆過濾器〕來進(jìn)行已抓取網(wǎng)頁查找。布隆過濾器布隆過濾器〔BloomFilter〕是由布隆〔BurtonHowardBloom〕在1970年提出的。它實(shí)際上是由一個(gè)很長(zhǎng)的二進(jìn)制向量和一系列無關(guān)的哈希函數(shù)組成,布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。它的優(yōu)點(diǎn)是空間效率和查詢時(shí)間都遠(yuǎn)遠(yuǎn)超過一般的算法,缺點(diǎn)是有一定的誤識(shí)別率和刪除困難。即BloomFilter報(bào)告某一元素存在于某集合中,但是實(shí)際上該元素并不在集合中,但是沒有識(shí)別錯(cuò)誤的情形,如果某個(gè)元素在該集合中,那么BloomFilter是不會(huì)報(bào)告該元素不在集合中的,所以不會(huì)漏報(bào)。布隆過濾器相比于其它的數(shù)據(jù)結(jié)構(gòu),布隆過濾器在空間和時(shí)間方面都有巨大的優(yōu)勢(shì)。布隆過濾器存儲(chǔ)空間和插入/查詢時(shí)間都是常數(shù)。另外,Hash函數(shù)相互之間沒有關(guān)系,方便由硬件并行實(shí)現(xiàn)。布隆過濾器不需要存儲(chǔ)元素本身,在某些對(duì)保密要求非常嚴(yán)格的場(chǎng)合有優(yōu)勢(shì)。Python高級(jí)爬蟲框架ScrapyScrapy,Python開發(fā)的一個(gè)快速,高層次的屏幕

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論