爬蟲必須得會的預備知識
作者 | CriseLYJ
來源 | GitHub
摘要:爬蟲所需要的相關知識儲備。
這兩天看到一個很不錯的爬蟲教程庫,作者宣稱能從從零到一教學會爬蟲,課程內容包含 js逆向,selenium, tesseract OCR 識別, mongodb 的使用,以及 Scrapy 框架,目前更新了一部分。地址:
https://github.com/CriseLYJ/Python-crawler-tutorial-starts-from-zero
本文節選了部分爬蟲入門基礎知識,分享給各位。
爬蟲定義、分類和流程
爬蟲定義
網路爬蟲(又被稱為網頁蜘蛛,網路機器人)就是模擬瀏覽器傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。
爬蟲就是模擬瀏覽器的行為,越像越好,越像就越不容易被發現。
原則上,只要是瀏覽器(客戶端)能做的事情,爬蟲都能夠做。
爬蟲的分類
通用爬蟲:通常指搜尋引擎的爬蟲
聚焦爬蟲:針對特定網站的爬蟲
爬蟲的用途
今日頭條
網易雲音樂
12306搶票
網站自動投票
簡訊轟炸
等等
爬蟲的流程
向起始url傳送請求,並獲取響應
對響應進行提取
如果提取url,則繼續傳送請求獲取響應
如果提取資料,則將資料進行儲存
robots 協議
Robots 協議:網站通過 Robots 協議告訴搜尋引擎哪些頁面可以抓取,哪些頁面不能抓取,但它僅僅是道德層面上的約束 例如:淘寶的 robots 協議
總結
爬蟲概念:模擬瀏覽器傳送網路請求,接收請求響應。只要是瀏覽器(客戶端)能做的事情,爬蟲都能夠做。
爬蟲的分類:聚焦爬蟲、通用爬蟲
爬蟲的流程:
向起始 url 傳送請求,並獲取響應
對響應進行提取
如果提取 url,則繼續傳送請求獲取響應
如果提取資料,則將資料進行儲存
HTTP 與 HTTPS 的概念
HTTP
概念:HTTP(超文字傳輸協議)是應用層上的一種客戶端/服務端模型的通訊協議,它由請求和響應構成,且是無狀態的。 協議:協議規定了通訊雙方必須遵守的資料傳輸格式,這樣通訊雙方按照約定的格式才能準確的通訊。 無狀態:無狀態是指兩次諒解通訊之間是沒有任何聯絡的,每次都是一個新的連線,服務端不會記錄前後的請求資訊。
HTTP 請求流程
瀏覽器通過域名解析伺服器(DNS)獲取IP地址
瀏覽器先向 IP 發起請求,並獲取相應
在返回的響應內容(html)中,會帶有 css、js、圖片等 url 地址,以及 ajax 程式碼,瀏覽器按照響應內容中的順序依次傳送其他的請求,並獲取相應的響應
瀏覽器每獲取一個響應就對展示出的結果進行新增(載入),js,css 等內容會修改頁面的內容,js也可以重新傳送請求,獲取響應
從獲取第一個響應並在瀏覽器中展示,直到最終獲取全部響應,並在展示的結果中新增內容或修改————這個過程叫做瀏覽器的渲染
五層網路模型
HTTP協議結構圖
網路模型對應關係
HTTP、RTSP、FTP -------> 應用層
TCP、UDP -------> 傳輸層
IP -------> 網路層
資料鏈路 -------> 資料鏈路層
物理介質 -------> 物理層
url 地址格式
格式說明: scheme://host[:port]/path/…/[?query-string][#anchor]
scheme:協議(例如:http, https, ftp)
host:伺服器的 IP 地址或者域名
port:伺服器的埠(如果是走協議預設埠,預設埠80)
path:訪問資源的路徑
query-string:引數,傳送給 http 伺服器的資料
anchor:錨(跳轉到網頁的指定錨點位置)
HTTP 請求
請求格式
案例
請求方式
根據 HTTP 標準,HTTP 請求可以使用多種請求方法。
HTTP1.0 定義了三種請求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
請求方式 | 描述 |
---|---|
GET | 請求指定的頁面資訊,並返回實體主體。 |
HEAD | 類似於 get 請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
POST | 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST 請求可能會導致新的資源的建立和/或已有資源的修改。 |
PUT | 從客戶端向伺服器傳送的資料取代指定的文件的內容 |
DELETE | 請求伺服器刪除指定的頁面。 |
CONNECT | HTTP/1.1 協議中預留給能夠將連線改為管道方式的代理伺服器。 |
OPTIONS | 允許客戶端檢視伺服器的效能。 |
TRACE | 回顯伺服器收到的請求,主要用於測試或診斷。 |
常見請求頭
請求頭 | 作用 |
---|---|
Cookie | Cookie |
User-Agent | 瀏覽器名稱 |
Referer | 頁面跳轉處 |
Host | 主機和埠號 |
Connection | 連結型別 |
Upgrade-Insecure-Requests | 升級為 HTTPS 請求 |
Accept | 傳輸檔案型別 |
Accept-Encoding | 檔案編解碼格式 |
x-requested-with : XMLHttpRequest | ajax 請求 |
HTTP 響應
響應格式
HTTP響應也由四個部分組成,分別是:狀態行、訊息報頭、空行(回車符 + 換行符)和響應正文。
響應頭
響應頭 | 作用 |
---|---|
Location | 這個頭配合 302 狀態碼使用,告訴使用者端找誰。 |
Set-Cookie | 設定和頁面關聯的 Cookie |
Content-Type | 伺服器通過這個頭,回送資料的型別 |
Server | 伺服器通過這個頭,告訴瀏覽器伺服器的型別 |
Content-Length | 伺服器通過這個頭,告訴瀏覽器回送資料的長度 |
Connection | 伺服器通過這個頭,響應完是保持連結還是關閉連結 |
HTTP 狀態碼
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在伺服器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的伺服器會返回一個包含 HTTP 狀態碼的資訊頭(server header)用以響應瀏覽器的請求。
HTTP 狀態碼的英文為 HTTP Status Code。
HTTP 狀態碼由三個十進位制數字組成,第一個十進位制數字定義了狀態碼的型別,後兩個數字沒有分類的作用。HTTP 狀態碼共分為 5 種型別
分類 | 分類描述 |
---|---|
1** | 資訊,伺服器收到請求,需要請求者繼續執行操作 |
2** | 成功,操作被成功接收並處理 |
3** | 重定向,需要進一步的操作以完成請求 |
4** | 客戶端錯誤,請求包含語法錯誤或無法完成請求 |
5** | 伺服器錯誤,伺服器在處理請求的過程中發生了錯誤 |
常見的 HTTP 狀態碼:
200 - 請求成功
301 - 資源(網頁等)被永久轉移到其它 URL
404 - 請求的資源(網頁等)不存在
500 - 內部伺服器錯誤
HTTPS
1- HTTP + SSL (安全套接字層),即帶有安全套接字層的超本文傳輸協議
2- 預設埠號:443
HTTPS 作用
在傳輸過程中對資料進行加密,防止中間路由器、交換機等中間的路由裝置對資料進行篡改。
HTTP 與 HTTPS 優缺點
HTTP 因為不需要對資料進行加密所以效能更高,但是安全性差。
HTTPS 雖然安全性高,但是因為瀏覽器和伺服器端需要對資料進行加解密,所以佔用伺服器資源。
當前形式
注意:目前 HTTPS 是未來主流,微信小程式,iOS 客戶端,android 客戶端的介面提供都需要 HTTPS 介面支援。
本文完。
/今日留言主題/
你能搞清 HTTP 和 HTTPS 的異同麼
(留言格式:Dayxx:blahblah)
另外強調一下,以後留言在推文發出去 24 小時內有效,過後就算中斷
相關文章
- 學習爬蟲必須學的基礎知識爬蟲
- Python爬蟲需要學哪些東西?這些知識點必須掌握!Python爬蟲
- 零基礎入門學習Python爬蟲必備的知識點!Python爬蟲
- 必須懂的mysql知識MySql
- 千萬淘寶店運營必備知識,你必須知道!
- 3款你必須知道的爬蟲工具爬蟲
- 爬蟲必學知識之正規表示式上篇爬蟲
- 前端必須掌握的知識點前端
- 爬蟲基礎知識爬蟲
- 關於索引必須知道的知識索引
- 【必知必會的MySQL知識】①初探MySQLMySql
- 【必知必會的MySQL知識】②使用MySQLMySql
- Python分散式爬蟲(三) - 爬蟲基礎知識Python分散式爬蟲
- Python爬蟲之路-爬蟲基礎知識(理論)Python爬蟲
- 逆向爬蟲知識學習爬蟲
- python爬蟲進階必備之代理Python爬蟲
- 學習 Laravel 必須理解的知識點Laravel
- 有關WebSocket必須瞭解的知識Web
- 你必須知道的Java基礎知識Java
- JavaScript必須要掌握的知識-作用域JavaScript
- css必備知識點CSS
- 必備知識點 模版
- 必備知識點 路由路由
- 【必知必會的MySQL知識】④DCL語言MySql
- 【必知必會的MySQL知識】⑤DQL語言MySql
- 【必知必會的MySQL知識】③DML語言MySql
- Java預備知識Java
- Android 之 Notification 必須掌握知識點Android
- 必須掌握的Linux使用者組知識Linux
- 外貿小白必須掌握的基礎知識
- 關於Flutter 您必須知道的知識點!!!Flutter
- 大學期間必須知道的JVM知識JVM
- 前端必備知識點—SVG前端SVG
- 必備知識點 檢視
- 網路基礎必備知識
- OpenStack必備基礎知識
- 前端進階必須懂得TCP/IP知識前端TCP
- Python入門必須知道的11個知識點Python