# 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 代码,请求一张图片,它的响应体就是图片的二进制数据。所以最主要的数据都包含在响应体中了,我们做爬虫请求网页后要解析的内容就是解析响应体
![](https://box.kancloud.cn/c3e420ad56ef77d7cfd1205c3404dd9b_2048x582.png)
我们在浏览器开发者工具中点击 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