# 2.1.6 響應
Response,即響應,由服務端返回給客戶端。Response 可以劃分為三部分,Response Status Code、Response Headers、Response Body。
## Response Status Code {#response-status-code}
響應狀態碼,此狀態碼表示了服務器的響應狀態,如 200 則代表服務器正常響應,404 則代表頁面未找到,500 則代表服務器內部發生錯誤。在爬蟲中,我們可以根據狀態碼來判斷服務器響應狀態,如判斷狀態碼為 200,則證明成功返回數據,再進行進一步的處理,否則直接忽略。
下面用表格列出了常見的錯誤代碼及錯誤原因:
| 狀態碼 | 說明 | 詳情 |
| :--- | :--- | :--- |
| 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 協議版本。 |
## Response Headers {#response-headers}
響應頭,其中包含了服務器對請求的應答信息,如 Content-Type、Server、Set-Cookie 等,下面將一些常用的頭信息說明如下:
* Date,標識 Response 產生的時間。
* Last-Modified,指定資源的最后修改時間。
* Content-Encoding,指定 Response 內容的編碼。
* Server,包含了服務器的信息,名稱,版本號等。
* Content-Type,文檔類型,指定了返回的數據類型是什么,如text/html 則代表返回 HTML 文檔,application/x-javascript 則代表返回 JavaScript 文件,image/jpeg 則代表返回了圖片。
* Set-Cookie,設置Cookie,Response Headers 中的 Set-Cookie即告訴瀏覽器需要將此內容放在 Cookies 中,下次請求攜帶 Cookies 請求。
* Expires,指定 Response 的過期時間,使用它可以控制代理服務器或瀏覽器將內容更新到緩存中,如果再次訪問時,直接從緩存中加載,降低服務器負載,縮短加載時間。
## Resposne Body {#resposne-body}
即響應體,最重要的當屬響應體內容了,響應的正文數據都是在響應體中,如請求一個網頁,它的響應體就是網頁的 HTML 代碼,請求一張圖片,它的響應體就是圖片的二進制數據。所以最主要的數據都包含在響應體中了,我們做爬蟲請求網頁后要解析的內容就是解析響應體

我們在瀏覽器開發者工具中點擊 Preview,就可以看到網頁的源代碼,這也就是響應體內容,是解析的目標。
我們在做爬蟲時主要解析的內容就是 Resposne Body,通過 Resposne Body 我們可以得到網頁的源代碼、Json 數據等等,然后從中做相應內容的提取。
- 介紹
- 1.開發環境配置
- 1.1 python3的安裝
- 1.1.1 windows下的安裝
- 1.1.2 Linux下的安裝
- 1.1.3 Mac下的安裝
- 1.2 請求庫的安裝
- 1.2.1 requests的安裝
- 1.2.2 selenium的安裝
- 1.2.3 ChromeDriver的安裝
- 1.2.4 GeckoDriver 的安裝
- 1.2.5 PhantomJS的安裝
- 1.2.6 aiohttp的安裝
- 1.3 解析庫的安裝
- 1.3.1 lxml的安裝
- 1.3.2 Beautiful Soup的安裝
- 1.3.3 pyquery的安裝
- 1.3.4 tesserocr的安裝
- 1.4 數據庫的安裝
- 1.4.1 MySQL的安裝
- 1.4.2 MongoDB的安裝
- 1.4.3 Redis的安裝
- 1.5 存儲庫的安裝
- 1.5.1 PyMySQL的安裝
- 1.5.2 PyMongo的安裝
- 1.5.3 redis-py的安裝
- 1.5.4 RedisDump的安裝
- 1.6 Web庫的安裝
- 1.6.1 Flask的安裝
- 1.6.2 Tornado的安裝
- 1.7 App爬取相關庫的安裝
- 1.7.1 Charles的安裝
- 1.7.2 mitmproxy的安裝
- 1.7.3 Appium的安裝
- 1.8 爬蟲框架的安裝
- 1.8.1 pyspider的安裝
- 1.8.2 Scrapy的安裝
- 1.8.3 Scrapy-Splash的安裝
- 1.8.4 ScrapyRedis的安裝
- 1.9 布署相關庫的安裝
- 1.9.1 Docker的安裝
- 1.9.2 Scrapyd的安裝
- 1.9.3 ScrapydClient的安裝
- 1.9.4 ScrapydAPI的安裝
- 1.9.5 Scrapyrt的安裝
- 1.9.6-Gerapy的安裝
- 2.爬蟲基礎
- 2.1 HTTP 基本原理
- 2.1.1 URI和URL
- 2.1.2 超文本
- 2.1.3 HTTP和HTTPS
- 2.1.4 HTTP請求過程
- 2.1.5 請求
- 2.1.6 響應
- 2.2 網頁基礎
- 2.2.1網頁的組成
- 2.2.2 網頁的結構
- 2.2.3 節點樹及節點間的關系
- 2.2.4 選擇器
- 2.3 爬蟲的基本原理
- 2.3.1 爬蟲概述
- 2.3.2 能抓怎樣的數據
- 2.3.3 javascript渲染的頁面
- 2.4 會話和Cookies
- 2.4.1 靜態網頁和動態網頁
- 2.4.2 無狀態HTTP
- 2.4.3 常見誤區
- 2.5 代理的基本原理
- 2.5.1 基本原理
- 2.5.2 代理的作用
- 2.5.3 爬蟲代理
- 2.5.4 代理分類
- 2.5.5 常見代理設置
- 3.基本庫使用
- 3.1 使用urllib
- 3.1.1 發送請求
- 3.1.2 處理異常
- 3.1.3 解析鏈接
- 3.1.4 分析Robots協議
- 3.2 使用requests
- 3.2.1 基本用法
- 3.2.2 高級用法
- 3.3 正則表達式
- 3.4 抓取貓眼電影排行
- 4.解析庫的使用
- 4.1 使用xpath
- 4.2 使用Beautiful Soup
- 4.3 使用pyquery
- 5.數據存儲
- 5.1 文件存儲
- 5.1.1 TXT 文件存儲
- 5.1.2 JSON文件存儲
- 5.1.3 CSV文件存儲
- 5.2 關系型數據庫存儲
- 5.2.1 MySQL的存儲
- 5.3 非關系數據庫存儲
- 5.3.1 MongoDB存儲
- 5.3.2 Redis存儲
- 6.Ajax數據爬取
- 6.1 什么是Ajax
- 6.2 Ajax分析方法
- 6.3 Ajax結果提取
- 6.4 分析Ajax爬取今日頭條街拍美圖
- 7.動態渲染頁面爬取
- 7.1 Selenium的使用
- 7.2 Splash的使用
- 7.3 Splash負載均衡配置
- 7.4 使用selenium爬取淘寶商品
- 8.驗證碼的識別
- 8.1 圖形驗證碼的識別
- 8.2 極驗滑動驗證碼的識別
- 8.3 點觸驗證碼的識別
- 8.4微博宮格驗證碼的識別
- 9.代理的使用
- 9.1 代理的設置
- 9.2 代理池的維護
- 9.3 付費代理的使用
- 9.4 ADSL撥號代理
- 9.5 使用代理爬取微信公總號文章
- 10.模擬登錄
- 10.1 模擬登陸并爬去GitHub
- 10.2 Cookies池的搭建
- 11.App的爬取
- 11.1 Charles的使用
- 11.2 mitmproxy的使用
- 11.3 mitmdump“得到”App電子書信息
- 11.4 Appium的基本使用
- 11.5 Appnium爬取微信朋友圈
- 11.6 Appium+mitmdump爬取京東商品
- 12.pyspider框架的使用
- 12.1 pyspider框架介紹
- 12.2 pyspider的基本使用
- 12.3 pyspider用法詳解
- 13.Scrapy框架的使用
- 13.1 scrapy框架介紹
- 13.2 入門
- 13.3 selector的用法
- 13.4 spider的用法
- 13.5 Downloader Middleware的用法
- 13.6 Spider Middleware的用法
- 13.7 Item Pipeline的用法
- 13.8 Scrapy對接Selenium
- 13.9 Scrapy對接Splash
- 13.10 Scrapy通用爬蟲
- 13.11 Scrapyrt的使用
- 13.12 Scrapy對接Docker
- 13.13 Scrapy爬取新浪微博
- 14.分布式爬蟲
- 14.1 分布式爬蟲原理
- 14.2 Scrapy-Redis源碼解析
- 14.3 Scrapy分布式實現
- 14.4 Bloom Filter的對接
- 15.分布式爬蟲的部署
- 15.1 Scrapyd分布式部署
- 15.2 Scrapyd-Client的使用
- 15.3 Scrapyd對接Docker
- 15.4 Scrapyd批量部署
- 15.5 Gerapy分布式管理
- 微信公總號文章實戰
- 源碼
- other