【Python爬蟲】—— HTTP基本原理

URI和URL

URI(Uniform Resource Identifier)即統一資源標誌符
URL(Universal Resource Locator)即統一資源定位符

例如:
https://github.com/favicon.ico 既是一個URL,也是一個URI

即有這樣的一個圖標資源
用 URL/URI 來唯一指定它的訪問方式
這其中包括了訪問協議 HTTPS、訪問路徑(即根目錄)和資源名稱 favicon.ico


URL是URI的一個子集

URI還包括一個子類 URN(Universal Resource Name),即統一資源名稱

URN只命名資源而不指定如何定位資源。

例如:
urn:isbn:0451450523 指定了一本書的 ISBN,可以唯一標識這本書,但是沒有指定到哪裏定位這本書。


URL、URN和URI的關係圖


超文本(Hypertext)

瀏覽器裏看到的網頁就是超文本解析而成的,其網頁源代碼是一系列HTML代碼,裏面包含了一系列標籤

例如:

  • img顯示圖片
  • p指定顯示段落等

瀏覽器解析這些標籤後,便形成了我們平常看到的網頁,而網頁的源代碼HTML就可以稱作超文本


HTTP和HTTPS

https://www.taobao.com/ 中,URL的開頭會有 http 或 https
這個就是訪問資源需要的協議類型,有時還會看到 ftp、sftp、 smb 開頭的 URL

ftp、sftp、 smb都是指的協議類型。

HTTP(Hyper Text Transfer Protocol)中文名叫作超文本傳輸協議。

用於從網絡傳輸超文本數據到本地瀏覽器的傳送協議,能保證高效而準確地傳送超文本文檔。

由萬維網協會(World Wide Web Consortium)和 Internet工作小組IETF(Internet Engineering Task Force)共同合作制定的規範,目前廣泛使用的是HTTP1.1版本。

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)

是以安全爲目標的 HTTP通道,簡單講是 HTTP的安全版,即 HTTP下加入 SSL層,簡稱爲 HTTPS

安全基礎是 SSL,因此通過它傳輸的內容都是經過 SSL加密。

HTTPS的主要作用可以分爲兩種:
  • 建立一個信息安全通道,來保證數據傳輸的安全。
  • 確認網站的真實性,凡是使用了 HTTPS 的網站,都可以通過點擊瀏覽器地址欄的鎖頭標誌來查看網站
    認證之後的真實信息,也可以通過 CA機構頒發的安全簽章來查詢。

HTTP請求過程

在瀏覽器中輸入一個URL,回車之後便可以在瀏覽器中觀察到頁面內容

這個過程是瀏覽器向網站所在的服務器發送了一個請求網站服務器接收到這個請求後進行處理和解析然後返回對應的響應接着傳回給瀏覽器


請求

請求方法

常見的有:GET 和 POST

GET

在瀏覽器中直接輸入URL並回車,便發起了一個 GET請求,請求的參數會直接包含到URL裏。

例如:在百度中搜索Python,這就是一個 GET請求,鏈接爲 https://www.baidu.com/s?wd=Python,URL中包含了請求的參數信息,這裏參數wd表示要搜尋的關鍵字。

POST

POST請求大多在表單提交時發起

例如:對於一個登錄表單,輸入用戶名和密碼後,點擊“登錄”按鈕,這時通常會發起一個POST請求,其數據通常以表單的形式傳輸,而不會體現在URL中。


GET和POST請求方法有如下區別

  • GET請求中的參數包含在 URL裏面,數據可以在URL中看到,而POST請求的 URL不會包含這些數據,數據都是通過表單形式傳輸的,會包含在請求體中。
  • GET請求提交的數據最多隻有1024字節,而POST請求沒有限制。

方法 描述
GET 請求頁面,並返回頁面內容
HEAD 類似於GET請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
POST 大多用於提交表單或上傳文件,數據包含在請求體中
PUT 從客戶端向服務器傳送的數據取代指定文檔中的內容
DELETE 請求服務器刪除指定的頁面
CONNECT 把服務器當作跳板,讓服務器代替客戶端訪問其他網頁
OPTIONS 允許客戶端查看服務器的性能
TRACE 回顯服務器收到的請求,主要用於測試或診斷

請求

  • 請求的網址
    即統一資源定位符URL,可以唯一確定我們想請求的資源

  • 請求頭
    用來說明服務器要使用的附加信息,比較重要的信息有 Cookie、Referer、User-Agent

  • Accept:請求報頭域,用於指定客戶端可接受哪些類型的信息

  • Accept-Language:指定客戶端可接受的語言類型

  • Accept-Encoding:指定客戶端可接受的內容編碼

  • Host:用於指定請求資源的主機IP和端口號,其內容爲請求URL的原始服務器或網關的位置
    從HTTP 1.1版本開始,請求必須包含此內容。

  • Cookie:也常用複數形式Cookies,這是網站爲了辨別用戶進行會話跟蹤而存儲在用戶本地的數據,它的主要功能是維持當前訪問會話。
    例如,我們輸入用戶名和密碼成功登錄某個網站後,服務器會用會話保存登錄狀態信息,後面我們每次刷新或請求該站點的其他頁面時,會發現都是登錄狀態,這就是Cookies的功勞。
    Cookies裏有信息標識了我們所對應的服務器的會話,每次瀏覽器在請求該站點的頁面時,都會在請求頭中加上Cookies並將其發送給服務器,服務器通過Cookies識別出是我們自己,並且查出當前狀態是登錄狀態,所以返回結果就是登錄之後才能看到的網頁內容。

  • Referer:此內容用來標識這個請求是從哪個頁面發過來的,服務器可以拿到這一信息並做相應的處理
    如做來源統計、防盜鏈處理等。

  • User-Agent:簡稱UA,它是一個特殊的字符串頭,可以使服務器識別客戶使用的操作系統及版本、瀏覽器及版本等信息。在做爬蟲時加上此信息,可以僞裝爲瀏覽器;如果不加,很可能會被識別出爲爬蟲。

  • Content-Type:也叫互聯網媒體類型(Internet Media Type)或者 MIME類型,在 HTTP協議消息頭中,它用來表示具體請求中的媒體類型信息。
    例如,text/html 代表 HTML格式,image / gif 代表 GIF圖片;application / json 代表 JSON類型

請求體一般承載的內容是POST請求中的表單數據,而對於GET請求,請求體則爲空。

表單提交中,需要正確設置Content-Type:
Content-Type 提交數據的方式
application / x-www-form-urlencoded 表單數據
multipart / form-data 表單文件上傳
application / json 序列化JSON數據
text / xml XML數據

響應

由服務端返回給客戶端,可以分爲三部分:

  1. 響應狀態碼(Response Status Code)
  2. 響應頭(Response Headers)
  3. 響應體(Response Body)
響應狀態碼錶示服務器的響應狀態:
狀態碼 說明 詳情
100 繼續 請求者應當繼續提出請求,服務器已收到請求的一部分,正在等待其餘部分
101 切換協議 請求者已要求服務器切換協議,服務器已確認並準備切換
200 成功 服務器已成功處理了請求
201 已創建 請求成功並且服務器創建了新的資源
202 已接受 服務器已接受請求,但尚未處理
203 非授權信息 服務器已成功處理了請求,但返回的信息可能來自另一個源
204 無內容 服務器成功處理了請求,但沒有返回任何內容
205 重置內容 服務器成功處理了請求,內容被重置
206 部分內容 服務器成功處理了部分請求
300 多種選擇 針對請求,服務器可執行多種操作
301 永久移動 請求的網頁已永久移動到新位置,即永久重定向
302 臨時移動 請求的網頁暫時跳轉到其他頁面,即暫時重定向
303 查看其他位置 如果原來的請求是POST,重定向目標文檔應該通過GET提取
304 未修改 此次請求返回的網頁未修改,繼續使用上次的資源
305 使用代理 請求者應該使用代理訪問該網頁
307 臨時重定向 請求的資源臨時從其他位置響應
400 錯誤請求 服務器無法解析該請求
401 未授權 請求沒有進行身份驗證或驗證未通過
403 禁止訪問 服務器拒絕此請求
404 未找到 服務器找不到請求的網頁
405 方法禁用 服務器禁用了請求中指定的方法
406 不接受 無法使用請求的內容響應請求的網頁
407 需要代理授權 請求者需要使用代理授權
408 請求超時 服務器請求超時
409 衝突 服務器在完成請求時發生衝突
410 已刪除 請求的資源已永久刪除
411 需要有效長度 服務器不接受不含有效內容長度標頭字段的請求
412 未滿足前提條件 服務器未滿足請求者在請求中設置的其中一個前提條件
413 請求實體過大 請求實體過大,超出服務器的處理能力
414 請求URI過長 請求網址過長,服務器無法處理
415 不支持類型 請求格式不被請求頁面支持
416 請求範圍不符 頁面無法提供請求的範圍
417 未滿足期望值 服務器未滿足期望請求標頭字段的要求
500 服務器內部錯誤 服務器遇到錯誤,無法宗成請求
501 未實現 服務器不具備完成請求的功能
502 錯誤網關 服務器作爲網關或代理,從上游服務器收到無效響應
503 服務不可用 服務器目前無法使用
504 網關超時 服務器作爲網關或代理,但是沒有及時從上游服務器收到請求
505 HTTP版本不支持 服務器不支持請求中所用的HTTP協議版本

響應頭包含了服務器對請求的應答信息,如Content-Type、Server、 Set-Cookie 等。

一些常用的頭信息:

  • Date:標識響應產生的時間
  • Last-Modified:指定資源的最後修改時間
  • Content-Encoding:指定響應內容的編碼
  • Server:包含服務器的信息,比如名稱、版本號等
  • Content-Type:文檔類型,指定返回的數據類型是什麼,如 text / html 代表返回 HTML文檔
    application / x-javascript 則代表返回 JavaScript文件,image / jpeg 則代表返回圖片
  • Set-Cookie:設置Cookies。 響應頭中的 Set-Cookie告訴瀏覽器需要將此內容放在 Cookies中
    下次請求攜帶Cookies請求。
  • Expires:指定響應的過期時間,可以使代理服務器或瀏覽器將加載的內容更新到緩存中
    如果再次訪問時,就可以直接從緩存中加載,降低服務器負裁,縮短加載時間。
最重要的當屬響應體的內容,響應的正文數據都在響應體中

例如:

  • 請求網頁時,它的響應體就是網頁的HTML代碼。

  • 請求一張圖片時,它的響應體就是圖片的二進制數據。


Reference:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=46#/detail/pc?id=1662

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章