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