Python爬蟲概述

1. 什麼是網絡爬蟲

網絡爬蟲是指按照某種規則在網絡上爬取所需內容的腳本程序。每個網頁通常包含其他網頁的入口,網絡爬蟲則是通過一個網址依次進入到網站,模擬客戶端發送網絡請求,接收請求響應,按照一定的規則,自動地抓取互聯網信息的程序。

2. 爬蟲分類

通用爬蟲:是捜索引擎抓取系統(如Baidu)的重要組成部分,目的是將互聯網上的網頁下載到本地,形成一個互聯網內容的鏡像備份。

爬取步驟:

  • 第一步:抓取網頁
  • 第二步:數據存儲
  • 第三步:預處理
  • 第四步:提供檢索服務,網站排名

侷限性:

  • 通用搜索引擎所返回的結果都是網頁,而大多情況下,網頁裏90%的內容對用戶來說都是無用的。
  • 不同領域、不同背景的用戶往往具有不同的檢索目的和需求,搜索引擎無法提供針對具體某個用戶的搜索結果。
  • 萬維網數據形式的豐富和網絡技術的不斷髮展,圖片、數據庫、音頻、視頻多媒體等不同數據大量出現,通用搜索引擎對這些文件無能爲力,不能很好地發現和獲取。
  • 通用搜索引擎大多提供基於關鍵字的檢索,難以支持根據語義信息提出的查詢,無法準確理解用戶的具體需求。

聚焦爬蟲:在對網頁抓取時會對內容進行處理篩選,儘量保證只抓取與需求相關的網頁信息。

增量式爬蟲:用來監測網站數據更新情況,以便於爬取網站最新的數據。

分佈式爬蟲:提高爬蟲效率的終極武器

3. 網絡爬蟲引發的問題

根據網絡爬蟲的尺寸分爲三類:

爬取目的 規模 常用庫
爬取網頁 玩轉網頁 小規模,數據量小,爬取速度不敏感(90%) Requests庫
爬取網站 爬取系列網站 中規模,數據規模大,爬取速度敏感(如攜程) Scrapy庫
爬取全網 大規模,用於建立搜索引擎,爬取速度關鍵(如Google) 定製開發

獲得網絡資源的同時也引發了一系列問題:

  • 騷擾問題:對網站正常運行帶來騷擾,給Web服務器帶來巨大的資源開銷
  • 法律風險:服務器上的數據是由產權歸屬的,網絡爬蟲獲取數據後牟利將帶來法律風險
  • 隱私泄露:具備一定突破簡單訪問控制的能力,獲得被保護數據從而泄露個人隱私

網絡爬蟲限制

  • 來源審查:通過判斷User-Agent進行限制。檢查來訪HTTP協議偷的User-Agent域,只響應瀏覽器或者友好的爬蟲訪問。
  • 發佈公告:Robots協議。告訴爬蟲策略,要求爬取數據者遵守規定的數據,是否遵守則要看爬蟲者。

4. HTTP/HTTPS的請求與響應

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是一種發佈和接收HTML頁面的方法。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)是HTTP的安全版,在HTTP下加入SSL層。SSL(Secure Sockets Layer 安全套接層)主要用於Web的安全傳輸協議,在傳輸層對網絡連接進行加密,保障在Internet上數據傳輸的安全。

HTTP的端口號爲80,HTTPS的端口號爲443

URL格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

  • scheme:協議(例如:http, https, ftp)
  • host:服務器的IP地址或者域名
  • port#:服務器的端口(如果是走協議默認端口,缺省端口80)
  • path:訪問資源的路徑
  • query-string:參數,發送給http服務器的數據
  • anchor:錨(跳轉到網頁的指定錨點位置)

例:http://www.baidu.com

  • scheme:http
  • port#:http://www.baidu.com

URL的理解:URL是通過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源

4.1 請求方法

序號 方法 描述
1 GET 請求指定的頁面信息,並返回實體主體。
2 HEAD 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
3 POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件),數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
4 PUT 從客戶端向服務器傳送的數據取代指定的文檔的內容。
5 DELETE 請求服務器刪除指定的頁面。
6 CONNECT HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
7 OPTIONS 允許客戶端查看服務器的性能。
8 TRACE 回顯服務器收到的請求,主要用於測試或診斷。

HTTP請求主要分爲Get和Post兩種方法:GET是從服務器上獲取數據,POST是向服務器傳送數據

  • GET請求參數顯示,都顯示在瀏覽器網址上,HTTP服務器根據該請求所包含URL中的參數來產生響應內容,即“Get”請求的參數是URL的一部分。例如:http://www.baidu.com/s?wd=Chinese
  • POST請求參數在請求體當中,消息長度沒有限制而且以隱式的方式進行發送,通常用來向HTTP服務器提交量比較大的數據(比如請求中包含許多參數或者文件上傳操作等),請求的參數包含在“Content-Type”消息頭裏,指明該消息體的媒體類型和編碼,

4.2 常用的請求報頭

名稱 說明
Host (主機和端口號) 用於指定被請求資源的Internet主機和端口號,屬於URL的一部分
Connection (鏈接類型) 表示客戶端與服務連接類型
Upgrade-Insecure-Requests (升級爲HTTPS請求) 升級不安全的請求,意思是會在加載http資源時自動替換成https請求
User-Agent (瀏覽器名稱) 客戶瀏覽器的名稱
Accept (傳輸文件類型) 指瀏覽器或其他客戶端可以接受的件類型,服務器可以根據它判斷並返回適當的文件格式
Accept-Encoding(文件編解碼格式) 指出瀏覽器可以接受的編碼方式
Accept-Charset(字符編碼) 指出瀏覽器可以接受的字符編碼
Cookie (Cookie) 瀏覽器用這個屬性向服務器發送Cookie。Cookie是在瀏覽器中寄存的小型數據體,它可以記載和服務器相關的用戶信息,也可以用來實現會話功能
Content-Type (POST數據類型) POST請求裏用來表示的內容類型

4.3 服務端響應狀態碼

類型 說明
100-199 表示服務器成功接收部分請求,要求客戶端繼續提交其餘請求才能完成整個處理過程
200-299 表示服務器成功接收請求並已完成整個處理過程。常用200(OK 請求成功)
300-399 爲完成請求,客戶需進一步細化請求。例如:請求的資源已經移動一個新地址、常用302(所請求的頁面已經臨時轉移至新的url)、307和304(使用緩存資源)
400-499 客戶端的請求有錯誤,常用404(服務器無法找到被請求的頁面)、403(服務器拒絕訪問,權限不夠)
500-599 服務器端出現錯誤,常用500(請求未完成。服務器遇到不可預知的情況)

5. Robots協議

Robots協議(也叫爬蟲協議、機器人協議等),全稱是“網絡爬蟲排除標準”(Robots Exclusion Protocol),網站通過Robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取,例如:

淘寶Robots協議分析

  • User-agent: Baiduspider
  • Disallow: /
  • User-agent: baiduspider
  • Disallow: /

Robots協議基本語法

  • " * “代表所有 ,” / "表示根目錄
  • User-agent:表示允許哪些爬蟲
  • Disallow:不允許爬蟲訪問的資源目錄

Robots協議的使用

  • 網絡爬蟲:自動或者人工識別robots.txt,再進行內容爬取
  • 約束性:Robots協議是建議但非約束性,網絡爬蟲課以不遵守,但存在法律風險

對Robots協議的理解

爬取目的 是否遵守
爬取網頁 玩轉網頁 可以遵守(訪問量較小)、建議遵守(訪問量較大)
爬取網站 爬取系列網站 非商業且偶爾(建議遵守)、商業利益(必須遵守)
爬取全網 必須遵守
類人類訪問的爬取(資源都是爲人類提供信息、且數據量小,次數少) 可以不參考Robots協議

6. 反爬策略

反爬機制:作用於門戶網站。如果網站不想讓爬蟲輕易獲取數據,通過制定相關機制來阻值爬蟲程序獲取數據。

反反爬策略:作用於爬蟲程序中。我們可以制定相關策略破解反爬機制從而獲取數據。

7. 爬蟲基本流程

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章