寫在前面的話 :最近博主在學習網絡爬蟲的相關技術(基於 Python 語言),作為一個學習的總結,打算用博客記錄下來,也希望和大家分享一下自己在學習過程中的點點滴滴,話不多說,讓我們馬上開始吧
一、爬蟲基本簡介
什么是網絡爬蟲,這里先引用一下 百度百科 上的解析:
網絡爬蟲是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本
說起網絡爬蟲,人們常常會用這樣一個比喻:如果把互聯網比喻成一張網,那么網絡爬蟲就可以認為是一個在網上爬來爬去的小蟲子,它通過網頁的鏈接地址來尋找網頁,通過特定的搜索算法來確定路線,通常從網站的某一個頁面開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有網頁都抓取完為止
二、爬蟲基本原理
下面的圖片很好的展現了一般網絡爬蟲的基本過程,下面讓我們來詳細解釋一下這張圖片的含義吧
1、發送請求
爬蟲的第一個步驟就是對起始 URL 發送請求,以獲取其返回的響應
值得注意的是,發送請求實質上是指發送請求報文的過程
請求報文 包括以下四個方面:請求行、請求頭、空行和請求體
但是,往往在使用 Python 相關的網絡請求庫發送請求時,只需關注某些特殊的部分即可,而非完整的請求報文,下面我們將以粗體的形式標識出我們需要特別關注的部分
(1)請求行
請求行由請求方法、請求 URL 和 HTTP 協議版本 3 個字段組成,字段間使用空格分隔
① 請求方法:請求方法是指對目標資源的操作方式,常見的有 GET 方法和 POST 方法
- GET:從指定的資源請求數據,查詢字符串包含在 URL 中發送
- POST:向指定的資源提交要被處理的數據,查詢字符串包含在請求體中發送
② 請求 URL:請求 URL 是指目標網站的統一資源定位符 (Uniform Resource Locator,URL)
③ HTTP 協議版本:HTTP 協議是指通信雙方在通信流程和內容格式上共同遵守的標准
(2)請求頭
請求頭 被認為是請求的配置信息,以下列舉出常用的請求頭信息(持續補充中)
- User-Agent:包含發出請求的用戶的信息,設置 User-Agent 常用於處理反爬蟲
- Cookie:包含先前請求的內容,設置 Cookie 常用於模擬登陸
- Referer:指示請求的來源,用於可以防止鏈盜以及惡意請求
(3)空行
空行標志着請求頭的結束
(4)請求體
請求體 根據不同的請求方法包含不同的內容
若請求方法為 GET,則此項為空;若請求方法為 POST,則此項為待提交的數據(即表單數據)
2、獲取響應
爬蟲的第二個步驟就是獲取特定 URL 返回的響應,以提取包含在其中的數據
同樣的,響應其實是指完整響應報文,它包括四個部分:響應行、響應頭、空行和響應體
(1)響應行
響應行由 HTTP 協議版本、狀態碼及其描述組成
① HTTP 協議版本:HTTP 協議是指通信雙方在通信流程和內容格式上共同遵守的標准
② 狀態碼及其描述
- 100~199:信息,服務器收到請求,需要請求者繼續執行操作
- 200~299:成功,操作被成功接收並處理
- 300~399:重定向,需要進一步的操作以完成請求
- 400~499:客戶端錯誤,請求包含語法錯誤或無法完成請求
- 500~599:服務器錯誤,服務器在處理請求的過程中發生錯誤
(2)響應頭
響應頭 用於描述服務器和數據的基本信息,以下列舉出常用的響應頭信息(持續補充中)
- Set-Cookie:設置瀏覽器 Cookie,以后當瀏覽器訪問符合條件的 URL 時,會自動帶上該 Cooike
(3)空行
空行標志着響應頭的結束
(4)響應體
響應體 就是網站返回的數據,在下一個步驟中我們需要對其進行分析處理
3、解析網頁
解析網頁實質上需要完成兩件事情,一是提取網頁上的鏈接,二是提取網頁上的資源
(1)提取鏈接
提取鏈接實質上是指獲取存在於待解析網頁上的其他網頁的鏈接
網絡爬蟲需要給這些鏈接發送請求,如此循環,直至把特定網站全部抓取完畢為止
(2)提取資源
提取數據則是爬蟲的目的,常見的數據類型如下:
- 文本:HTML,JSON 等
- 圖片:JPG,GIF,PNG 等
- 視頻:MPEG-1、MPEG-2 和 MPEG4,AVI 等
最終,我們可以對所獲得的資源作進一步的處理,從而提取出有價值的信息
【爬蟲系列相關文章】