本節書摘來自華章計算機《python爬蟲開發與項目實戰》一書中的第3章,第3.1節,作者:範傳輝著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
從本章開始,将正式涉及python爬蟲的開發。本章主要分為兩個部分:一部分是網絡爬蟲的概述,幫助大家詳細了解網絡爬蟲;另一部分是http請求的python實作,幫助大家了解python中實作http請求的各種方式,以便具備編寫http網絡程式的能力。
本節正式進入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實作這種網絡爬蟲結構。