一、爬蟲的概念
模擬瀏覽器,發送請求,獲取響應
網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人)就是模擬客戶端(主要指瀏覽器)發送網絡請求,接收請求響應,一種按照一定的規則,自動地抓取互聯網信息的程序。
-
原則上,只要是客戶端(瀏覽器)能做的事情,爬蟲都能夠做
-
爬蟲也只能獲取客戶端(瀏覽器)所展示出來的數據
二、爬蟲的作用
爬蟲在互聯網世界中有很多的作用,比如:
-
-
- 網站上的投票
-
-
網絡安全
三、爬蟲的分類
3.1 根據被爬取網站的數量不同,可以分為:
-
通用爬蟲,如 搜索引擎
-
聚焦爬蟲,如12306搶票,或專門抓取某一個(某一類)網站數據
3.2 根據是否以獲取數據為目的,可以分為:
-
功能性爬蟲,給你喜歡的明星投票、點贊
-
數據增量爬蟲,比如招聘信息
3.3 根據url地址和對應的頁面內容是否改變,數據增量爬蟲可以分為:
-
基於url地址變化、內容也隨之變化的數據增量爬蟲
-
url地址不變、內容變化的數據增量爬蟲
四、爬蟲的流程
-
-
向url發送請求,並獲取響應(需要http協議)
-
如果從響應中提取url,則繼續發送請求獲取響應
-
五、http的復習
一提起http協議,大家都會想起它是一個應用層協議,那么http協議跟爬蟲有什么關系呢?請看下圖:
http以及https的概念和區別
HTTPS比HTTP更安全,但是性能要低一些
-
HTTP:超文本傳輸協議,默認端口號是80
-
超文本:是指超過文本,不僅限於文本;還包括圖片、音頻、視頻等文件
-
傳輸協議:是指使用共用約定的固定格式來傳遞轉換成字符串的超文本內容
-
-
HTTPS:HTTP + SSL(安全套接字層),即帶有安全套接字層的超本文傳輸協,默認端口號:443
-
SSL對傳輸的內容(超文本,也就是請求體或響應體)進行加密
-
-
可以打開瀏覽器訪問一個url,右鍵檢查,點擊net work,點選一個url,查看http協議的形式
六、
-
http請求的形式如上圖所示,爬蟲特別關注以下幾個請求頭字段
-
Content-Type
-
Host (主機和端口號) 域名
-
Connection (鏈接類型) 長鏈接
-
Upgrade-Insecure-Requests (升級為HTTPS請求) 是否升級為https,1表示升級
-
User-Agent (瀏覽器名稱) 用戶代理,用戶本機信息及瀏覽器信息
-
Referer (頁面跳轉處) 頁面跳轉處,防盜鏈(圖片/視頻)
-
Cookie (Cookie) 狀態保持
-
Authorization(用於表示HTTP協議中需要認證資源的認證信息,如前邊web課程中用於jwt認證)
加粗的請求頭為常用請求頭,在服務器被用來進行爬蟲識別的頻率最高,相較於其余的請求頭更為重要,但是這里需要注意的是並不意味這其余的不重要,因為有的網站的運維或者開發人員可能劍走偏鋒,會使用一些比較不常見的請求頭來進行爬蟲的甄別
-
-
http響應的形式如上圖所示,爬蟲只關注一個響應頭字段
-
Set-Cookie (對方服務器設置cookie到用戶瀏覽器的緩存)
-
七、常見的響應狀態碼
-
200:成功
-
302:跳轉,新的url在響應的Location頭中給出
-
303:瀏覽器對於POST的響應進行重定向至新的url
-
307:瀏覽器對於GET的響應重定向至新的url
-
403:資源不可用;服務器理解客戶的請求,但拒絕處理它(沒有權限)
-
404:找不到該頁面
-
500:服務器內部錯誤
-
503:服務器由於維護或者負載過重未能應答,在響應中可能可能會攜帶Retry-After響應頭;有可能是因為爬蟲頻繁訪問url,使服務器忽視爬蟲的請求,最終返回503響應狀態碼
我們在學習web知識的時候就已經學過了狀態碼的相關知識,我們知道這是服務器給我的相關反饋,我們在學習的時候就被教育說應該將真實情況反饋給客戶端,但是在爬蟲中,可能該站點的開發人員或者運維人員為了阻止數據被爬蟲輕易獲取,可能在狀態碼上做手腳,也就是說返回的狀態碼並不一定就是真實情況,比如:服務器已經識別出你是爬蟲,但是為了讓你疏忽大意,所以照樣返回狀態碼200,但是響應體重並沒有數據。
所有的狀態碼都不可信,一切以是否從抓包得到的響應中獲取到數據為准
注意:
elements中的源碼是經過渲染之后的源碼,不能作為判斷標准.
elements的渲染結果指的是:抓包時,發送的所有請求得到的所有響應都匯總到elements中
只有network中抓包得到的源碼才是判斷依據
八、瀏覽器的運行過程
-
瀏覽器在拿到域名對應的ip后,先向地址欄中的url發起請求,並獲取響應
-
在返回的響應內容(html)中,會帶有css、js、圖片等url地址,以及ajax代碼,瀏覽器按照響應內容中的順序依次發送其他的請求,並獲取相應的響應
-
瀏覽器每獲取一個響應就對展示出的結果進行添加(加載),js,css等內容會修改頁面的內容,js也可以重新發送請求,獲取響應
-
從獲取第一個響應並在瀏覽器中展示,直到最終獲取全部響應,並在展示的結果中添加內容或修改————這個過程叫做瀏覽器的渲染
注意:
但是在爬蟲中,爬蟲只會請求url地址,對應的拿到url地址對應的響應(該響應的內容可以是html,css,js,圖片等)
瀏覽器渲染出來的頁面和爬蟲請求的頁面很多時候並不一樣,是因為爬蟲不具備渲染的能力(當然后續課程中我們會借助其它工具或包來幫助爬蟲對響應內容進行渲染)
-
瀏覽器最終展示的結果是由多個url地址分別發送的多次請求對應的多次響應共同渲染的結果
-
所以在爬蟲中,需要以發送請求的一個url地址對應的響應為准來進行數據的提取
瀏覽器和爬蟲的請求過程的區別
瀏覽器
發送所有請求,進行渲染
爬蟲
只發送指定請求,不會渲染
知識點:理解 瀏覽器展示的結果可以由多次請求對應的多次響應共同渲染出來,而爬蟲是一次請求對應一個響應
發送請求后獲得的文件主要有三類
- 骨骼文件
- html靜態文件
- 肌肉文件
- js/ajax請求 文件
- 皮膚文件
- css/font/圖片等 文件
抓包過程:
根據發送請求的流程,按順序分別在骨骼/肌肉/皮膚文件的響應中查找數據