Python爬蟲之路-爬蟲基礎知識(理論)

Jiayu920716發表於2021-01-04

爬蟲概述

知識點:
  • 瞭解 爬蟲的概念

  • 瞭解 爬蟲的作用

  • 瞭解 爬蟲的分類

  • 掌握 爬蟲的流程


1. 爬蟲的概念

模擬瀏覽器,傳送請求,獲取響應

網路爬蟲(又被稱為網頁蜘蛛,網路機器人)就是模擬客戶端(主要指瀏覽器)傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。

  • 原則上,只要是客戶端(瀏覽器)能做的事情,爬蟲都能夠做
  • 爬蟲也只能獲取客戶端(瀏覽器)所展示出來的資料

知識點:瞭解 爬蟲的概念

2. 爬蟲的作用

爬蟲在網際網路世界中有很多的作用,比如:

  1. 資料採集

    1. 抓取微博評論(機器學習輿情監控)
    2. 抓取招聘網站的招聘資訊(資料分析、挖掘)
    3. 新浪滾動新聞
    4. 百度新聞網站
  2. 軟體測試

    1. 爬蟲之自動化測試
    2. 蟲師
  3. 12306搶票

  4. 網站上的投票

    1. 投票網
  5. 網路安全

    1. 簡訊轟炸

      1. 註冊頁面1
      2. 註冊頁面2
      3. 註冊頁面3
    2. web漏洞掃描


知識點:瞭解 爬蟲的作用

3. 爬蟲的分類

3.1 根據被爬取網站的數量不同,可以分為:

  • 通用爬蟲,如 搜尋引擎
  • 聚焦爬蟲,如12306搶票,或專門抓取某一個(某一類)網站資料

3.2 根據是否以獲取資料為目的,可以分為:

  • 功能性爬蟲,給你喜歡的明星投票、點贊
  • 資料增量爬蟲,比如招聘資訊

3.3 根據url地址和對應的頁面內容是否改變,資料增量爬蟲可以分為:

  • 基於url地址變化、內容也隨之變化的資料增量爬蟲

  • url地址不變、內容變化的資料增量爬蟲

在這裡插入圖片描述


知識點:瞭解 爬蟲的分類

4. 爬蟲的流程

爬蟲的基本流程如圖所示

在這裡插入圖片描述

  1. 獲取一個url
  2. 向url傳送請求,並獲取響應(需要http協議)
  3. 如果從響應中提取url,則繼續傳送請求獲取響應
  4. 如果從響應中提取資料,則將資料進行儲存

知識點:掌握 爬蟲的流程
  • 掌握 http以及https的概念和預設埠

  • 掌握 爬蟲關注的請求頭和響應頭

  • 瞭解 常見的響應狀態碼

  • 理解 瀏覽器和爬蟲爬取的區別


一提起http協議,大家都會想起它是一個應用層協議,那麼http協議跟爬蟲有什麼關係呢?請看下圖:

在這裡插入圖片描述

1. http以及https的概念和區別

HTTPS比HTTP更安全,但是效能更低

  • HTTP:超文字傳輸協議,預設埠號是80
    • 超文字:是指超過文字,不僅限於文字;還包括圖片、音訊、視訊等檔案
    • 傳輸協議:是指使用共用約定的固定格式來傳遞轉換成字串的超文字內容
  • HTTPS:HTTP + SSL(安全套接字層),即帶有安全套接字層的超本文傳輸協,預設埠號:443
    • SSL對傳輸的內容(超文字,也就是請求體或響應體)進行加密
  • 可以開啟瀏覽器訪問一個url,右鍵檢查,點選net work,點選一個url,檢視http協議的形式

知識點:掌握 http以及https的概念和預設埠


2. 爬蟲特別關注的請求頭和響應頭

2.1 特別關注的請求頭欄位

在這裡插入圖片描述

http請求的形式如上圖所示,爬蟲特別關注以下幾個請求頭欄位

  • Content-Type
  • Host (主機和埠號)
  • Connection (連結型別)
  • Upgrade-Insecure-Requests (升級為HTTPS請求)
  • User-Agent (瀏覽器名稱)
  • Referer (頁面跳轉處)
  • Cookie (Cookie)
  • Authorization(用於表示HTTP協議中需要認證資源的認證資訊,如前邊web課程中用於jwt認證)

加粗的請求頭為常用請求頭,在伺服器被用來進行爬蟲識別的頻率最高,相較於其餘的請求頭更為重要,但是這裡需要注意的是並不意味這其餘的不重要,因為有的網站的運維或者開發人員可能劍走偏鋒,會使用一些比較不常見的請求頭來進行爬蟲的甄別

2.2 特別關注的響應頭欄位

在這裡插入圖片描述

http響應的形式如上圖所示,爬蟲只關注一個響應頭欄位

  • Set-Cookie (對方伺服器設定cookie到使用者瀏覽器的快取)

知識點:掌握 爬蟲關注的請求頭和響應頭

3. 常見的響應狀態碼

  • 200:成功
  • 302:跳轉,新的url在響應的Location頭中給出
  • 303:瀏覽器對於POST的響應進行重定向至新的url
  • 307:瀏覽器對於GET的響應重定向至新的url
  • 403:資源不可用;伺服器理解客戶的請求,但拒絕處理它(沒有許可權)
  • 404:找不到該頁面
  • 500:伺服器內部錯誤
  • 503:伺服器由於維護或者負載過重未能應答,在響應中可能可能會攜帶Retry-After響應頭;有可能是因為爬蟲頻繁訪問url,使伺服器忽視爬蟲的請求,最終返回503響應狀態碼

我們在學習web知識的時候就已經學過了狀態碼的相關知識,我們知道這是伺服器給我的相關反饋,我們在學習的時候就被教育說應該將真實情況反饋給客戶端,但是在爬蟲中,可能該站點的開發人員或者運維人員為了阻止資料被爬蟲輕易獲取,可能在狀態碼上做手腳,也就是說返回的狀態碼並不一定就是真實情況,比如:伺服器已經識別出你是爬蟲,但是為了讓你疏忽大意,所以照樣返回狀態碼200,但是響應體重並沒有資料。

所有的狀態碼都不可信,一切以是否從抓包得到的響應中獲取到資料為準


知識點:瞭解 常見的響應狀態碼


4. 瀏覽器的執行過程

在回顧完http協議後,我們來了解以下瀏覽器傳送http請求的過程

在這裡插入圖片描述

4.1 http請求的過程

  1. 瀏覽器在拿到域名對應的ip後,先向位址列中的url發起請求,並獲取響應
  2. 在返回的響應內容(html)中,會帶有css、js、圖片等url地址,以及ajax程式碼,瀏覽器按照響應內容中的順序依次傳送其他的請求,並獲取相應的響應
  3. 瀏覽器每獲取一個響應就對展示出的結果進行新增(載入),js,css等內容會修改頁面的內容,js也可以重新傳送請求,獲取響應
  4. 從獲取第一個響應並在瀏覽器中展示,直到最終獲取全部響應,並在展示的結果中新增內容或修改————這個過程叫做瀏覽器的渲染

4.2 注意:

但是在爬蟲中,爬蟲只會請求url地址,對應的拿到url地址對應的響應(該響應的內容可以是html,css,js,圖片等)

瀏覽器渲染出來的頁面和爬蟲請求的頁面很多時候並不一樣,是因為爬蟲不具備渲染的能力(當然後續課程中我們會藉助其它工具或包來幫助爬蟲對響應內容進行渲染)

  • 瀏覽器最終展示的結果是由多個url地址分別傳送的多次請求對應的多次響應共同渲染的結果
  • 所以在爬蟲中,需要以傳送請求的一個url地址對應的響應為準來進行資料的提取

知識點:理解 瀏覽器展示的結果可以由多次請求對應的多次響應共同渲染出來,而爬蟲是一次請求對應一個響應

5. 關於http協議的其它參考閱讀

  • https://blog.csdn.net/qq_33301113/article/category/6943422/2
  • https://www.xuebuyuan.com/3252125.html
  • https://baike.baidu.com/item/http/243074?fr=aladdin
  • https://www.jianshu.com/p/cc1fea7810b2
  • https://blog.csdn.net/qq_30553235/article/details/79282113
  • https://segmentfault.com/q/1010000002403462

相關文章