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

下載本文檔

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

文檔簡介

Python爬蟲設(shè)計入門

重慶大學(xué)軟件效勞工程實(shí)驗(yàn)室余俊良UsingPythonToDesignACrawlerSummarize根本的爬蟲工作原理簡單爬蟲設(shè)計入門庫:下載網(wǎng)頁:urllib,Requests解析網(wǎng)頁:BeautifulSoup模擬交互,處理JS動態(tài)網(wǎng)頁:Selenium高級爬蟲框架Scrapy分布式爬蟲設(shè)計分布式隊(duì)列布隆過濾器(BloomFilter)網(wǎng)絡(luò)爬蟲是一個自動提取網(wǎng)頁的程序,它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁,是搜索引擎的重要組成。傳統(tǒng)爬蟲從一個或假設(shè)干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件。什么是爬蟲批量型爬蟲批量型爬蟲有明確的抓取范圍和目標(biāo),當(dāng)爬蟲到達(dá)這個設(shè)定的目標(biāo)后,即停止抓取過程。增量型爬蟲增量型爬蟲會持續(xù)不斷的抓取,對于抓取的網(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對應(yīng)的網(wǎng)頁下載下來,存儲進(jìn)已下載網(wǎng)頁庫中。此外,將這些URL放進(jìn)已抓取URL隊(duì)列。4.分析已抓取URL隊(duì)列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊(duì)列,從而進(jìn)入下一個循環(huán)。從爬蟲的角度對互聯(lián)網(wǎng)進(jìn)行劃分從爬蟲的角度對互聯(lián)網(wǎng)進(jìn)行劃分對應(yīng)的,可以將互聯(lián)網(wǎng)的所有頁面分為五個局部:1.已下載未過期網(wǎng)頁2.已下載已過期網(wǎng)頁:抓取到的網(wǎng)頁實(shí)際上是互聯(lián)網(wǎng)內(nèi)容的一個鏡像與備份,互聯(lián)網(wǎng)是動態(tài)變化的,一局部互聯(lián)網(wǎng)上的內(nèi)容已經(jīng)發(fā)生了變化,這時,這局部抓取到的網(wǎng)頁就已經(jīng)過期了。3.待下載網(wǎng)頁:也就是待抓取URL隊(duì)列中的那些頁面4.可知網(wǎng)頁:還沒有抓取下來,也沒有在待抓取URL隊(duì)列中,但是可以通過對已抓取頁面或者待抓取URL對應(yīng)頁面進(jìn)行分析獲取到的URL,認(rèn)為是可知網(wǎng)頁。5.還有一局部網(wǎng)頁,爬蟲是無法直接抓取下載的。稱為不可知網(wǎng)頁。抓取策略在爬蟲系統(tǒng)中,待抓取URL隊(duì)列是很重要的一局部。待抓取URL隊(duì)列中的URL以什么樣的順序排列也是一個很重要的問題,因?yàn)檫@涉及到先抓取那個頁面,后抓取哪個頁面。而決定這些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í)時變化的,具有很強(qiáng)的動態(tài)性。網(wǎng)頁更新策略主要是決定何時更新之前已經(jīng)下載過的頁面。常見的更新策略又以下三種:1.歷史參考策略

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

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

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

3.聚類抽樣策略前面提到的兩種更新策略都有一個前提:需要網(wǎng)頁的歷史信息。這樣就存在兩個問題:第一,系統(tǒng)要是為每個系統(tǒng)保存多個版本的歷史信息,無疑增加了很多的系統(tǒng)負(fù)擔(dān);第二,要是新的網(wǎng)頁完全沒有歷史信息,就無法確定更新策略。這種策略認(rèn)為,網(wǎng)頁具有很多屬性,類似屬性的網(wǎng)頁,可以認(rèn)為其更新頻率也是類似的。要計算某一個類別網(wǎng)頁的更新頻率,只需要對這一類網(wǎng)頁抽樣,以他們的更新周期作為整個類別的更新周期。分布式抓取系統(tǒng)結(jié)構(gòu)

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

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

2.對等式〔PeertoPeer〕主從式抓取系統(tǒng)結(jié)構(gòu)主從式抓取系統(tǒng)結(jié)構(gòu)對于主從式而言,有一臺專門的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)解各個Slave效勞器的負(fù)載情況。以免某些Slave效勞器過于清閑或者勞累。這種模式下,Master往往容易成為系統(tǒng)瓶頸。對等式抓取系統(tǒng)結(jié)構(gòu)對等式抓取系統(tǒng)結(jié)構(gòu)

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論