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協議
- 騰訊網Robots協議
- 其它網站Robots協議是通過網頁鏈接+/robots.txt即可查看
淘寶Robots協議分析
- User-agent: Baiduspider
- Disallow: /
- User-agent: baiduspider
- Disallow: /
Robots協議基本語法
- " * “代表所有 ,” / "表示根目錄
- User-agent:表示允許哪些爬蟲
- Disallow:不允許爬蟲訪問的資源目錄
Robots協議的使用
- 網絡爬蟲:自動或者人工識別robots.txt,再進行內容爬取
- 約束性:Robots協議是建議但非約束性,網絡爬蟲課以不遵守,但存在法律風險
對Robots協議的理解
爬取目的 | 是否遵守 |
---|---|
爬取網頁 玩轉網頁 | 可以遵守(訪問量較小)、建議遵守(訪問量較大) |
爬取網站 爬取系列網站 | 非商業且偶爾(建議遵守)、商業利益(必須遵守) |
爬取全網 | 必須遵守 |
類人類訪問的爬取(資源都是爲人類提供信息、且數據量小,次數少) | 可以不參考Robots協議 |
6. 反爬策略
反爬機制:作用於門戶網站。如果網站不想讓爬蟲輕易獲取數據,通過制定相關機制來阻值爬蟲程序獲取數據。
反反爬策略:作用於爬蟲程序中。我們可以制定相關策略破解反爬機制從而獲取數據。