《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述
本節(jié)書摘來自華章計算機(jī)《Python爬蟲開發(fā)與項目實戰(zhàn)》一書中的第3章,第3.1節(jié),作者:范傳輝著,更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計算機(jī)”公眾號查看
第3章 初識網(wǎng)絡(luò)爬蟲
從本章開始,將正式涉及Python爬蟲的開發(fā)。本章主要分為兩個部分:一部分是網(wǎng)絡(luò)爬蟲的概述,幫助大家詳細(xì)了解網(wǎng)絡(luò)爬蟲;另一部分是HTTP請求的Python實現(xiàn),幫助大家了解Python中實現(xiàn)HTTP請求的各種方式,以便具備編寫HTTP網(wǎng)絡(luò)程序的能力。
3.1 網(wǎng)絡(luò)爬蟲概述
本節(jié)正式進(jìn)入Python爬蟲開發(fā)的專題,接下來從網(wǎng)絡(luò)爬蟲的概念、用處與價值和結(jié)構(gòu)等三個方面,讓大家對網(wǎng)絡(luò)爬蟲有一個基本的了解。
3.1.1 網(wǎng)絡(luò)爬蟲及其應(yīng)用
隨著網(wǎng)絡(luò)的迅速發(fā)展,萬維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個巨大的挑戰(zhàn),網(wǎng)絡(luò)爬蟲應(yīng)運(yùn)而生。網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人),是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。下面通過圖3-1展示一下網(wǎng)絡(luò)爬蟲在互聯(lián)網(wǎng)中起到的作用:
網(wǎng)絡(luò)爬蟲按照系統(tǒng)結(jié)構(gòu)和實現(xiàn)技術(shù),大致可以分為以下幾種類型:通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、增量式網(wǎng)絡(luò)爬蟲、深層網(wǎng)絡(luò)爬蟲。實際的網(wǎng)絡(luò)爬蟲系統(tǒng)通常是幾種爬蟲技術(shù)相結(jié)合實現(xiàn)的。
搜索引擎(Search Engine),例如傳統(tǒng)的通用搜索引擎baidu、Yahoo和Google等,是一種大型復(fù)雜的網(wǎng)絡(luò)爬蟲,屬于通用性網(wǎng)絡(luò)爬蟲的范疇。但是通用性搜索引擎存在著一定的局限性:
1)不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,通用搜索引擎所返回的結(jié)果包含大量用戶不關(guān)心的網(wǎng)頁。
2)通用搜索引擎的目標(biāo)是盡可能大的網(wǎng)絡(luò)覆蓋率,有限的搜索引擎服務(wù)器資源與無限的網(wǎng)絡(luò)數(shù)據(jù)資源之間的矛盾將進(jìn)一步加深。
3)萬維網(wǎng)數(shù)據(jù)形式的豐富和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,圖片、數(shù)據(jù)庫、音頻、視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通用搜索引擎往往對這些信息含量密集且具有一定結(jié)構(gòu)的數(shù)據(jù)無能為力,不能很好地發(fā)現(xiàn)和獲取。
4)通用搜索引擎大多提供基于關(guān)鍵字的檢索,難以支持根據(jù)語義信息提出的查詢。
為了解決上述問題,定向抓取相關(guān)網(wǎng)頁資源的聚焦爬蟲應(yīng)運(yùn)而生。
聚焦爬蟲是一個自動下載網(wǎng)頁的程序,它根據(jù)既定的抓取目標(biāo),有選擇地訪問萬維網(wǎng)上的網(wǎng)頁與相關(guān)的鏈接,獲取所需要的信息。與通用爬蟲不同,聚焦爬蟲并不追求大的覆蓋,而將目標(biāo)定為抓取與某一特定主題內(nèi)容相關(guān)的網(wǎng)頁,為面向主題的用戶查詢準(zhǔn)備數(shù)據(jù)資源。
說完了聚焦爬蟲,接下來再說一下增量式網(wǎng)絡(luò)爬蟲。增量式網(wǎng)絡(luò)爬蟲是指對已下載網(wǎng)頁采取增量式更新和只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是盡可能新的頁面。和周期性爬行和刷新頁面的網(wǎng)絡(luò)爬蟲相比,增量式爬蟲只會在需要的時候爬行新產(chǎn)生或發(fā)生更新的頁面,并不重新下載沒有發(fā)生變化的頁面,可有效減少數(shù)據(jù)下載量,及時更新已爬行的網(wǎng)頁,減小時間和空間上的耗費(fèi),但是增加了爬行算法的復(fù)雜度和實現(xiàn)難度。例如:想獲取趕集網(wǎng)的招聘信息,以前爬取過的數(shù)據(jù)沒有必要重復(fù)爬取,只需要獲取更新的招聘數(shù)據(jù),這時候就要用到增量式爬蟲。
最后說一下深層網(wǎng)絡(luò)爬蟲。Web頁面按存在方式可以分為表層網(wǎng)頁和深層網(wǎng)頁。表層網(wǎng)頁是指傳統(tǒng)搜索引擎可以索引的頁面,以超鏈接可以到達(dá)的靜態(tài)網(wǎng)頁為主構(gòu)成的Web頁面。深層網(wǎng)絡(luò)是那些大部分內(nèi)容不能通過靜態(tài)鏈接獲取的、隱藏在搜索表單后的,只有用戶提交一些關(guān)鍵詞才能獲得的Web頁面。例如用戶登錄或者注冊才能訪問的頁面。可以想象這樣一個場景:爬取貼吧或者論壇中的數(shù)據(jù),必須在用戶登錄后,有權(quán)限的情況下才能獲取完整的數(shù)據(jù)。
本書除了通用性爬蟲不會涉及之外,聚焦爬蟲、增量式爬蟲和深層網(wǎng)絡(luò)爬蟲的具體運(yùn)用都會進(jìn)行講解。下面展示一下網(wǎng)絡(luò)爬蟲實際運(yùn)用的一些場景:
1)常見的BT網(wǎng)站,通過爬取互聯(lián)網(wǎng)的DHT網(wǎng)絡(luò)中分享的BT種子信息,提供對外搜索服務(wù)。如圖3-2所示。
2)一些云盤搜索網(wǎng)站,通過爬取用戶共享出來的云盤文件數(shù)據(jù),對文件數(shù)據(jù)進(jìn)行分類劃分,從而提供對外搜索服務(wù)。如圖3-3所示。
3.1.2 網(wǎng)絡(luò)爬蟲結(jié)構(gòu)
下面用一個通用的網(wǎng)絡(luò)爬蟲結(jié)構(gòu)來說明網(wǎng)絡(luò)爬蟲的基本工作流程,如圖3-4所示。
網(wǎng)絡(luò)爬蟲的基本工作流程如下:
1)首先選取一部分精心挑選的種子URL。
2)將這些URL放入待抓取URL隊列。
3)從待抓取URL隊列中讀取待抓取隊列的URL,解析DNS,并且得到主機(jī)的IP,并將URL對應(yīng)的網(wǎng)頁下載下來,存儲進(jìn)已下載網(wǎng)頁庫中。此外,將這些URL放進(jìn)已抓取URL隊列。
4)分析已抓取URL隊列中的URL,從已下載的網(wǎng)頁數(shù)據(jù)中分析出其他URL,并和已抓取的URL進(jìn)行比較去重,最后將去重過的URL放入待抓取URL隊列,從而進(jìn)入下一個循環(huán)。
這便是一個基本的通用網(wǎng)絡(luò)爬蟲框架及其工作流程,在之后的章節(jié)我們會用Python實現(xiàn)這種網(wǎng)絡(luò)爬蟲結(jié)構(gòu)。
總結(jié)
以上是生活随笔為你收集整理的《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 细说php这么难懂,挺难懂的解决方法
- 下一篇: Sublime 解决目录显示为方块的问题