【爬虫】爬虫基础
HTTP基本原理
URL(统一资源定位符)格式:
scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]
- scheme: 协议,又称protocol,常用的有http、https、ftp等
- username、password: 用户名和密码
- hostname: 域名或IP地址
- port: 端口。http协议默认端口为80,https为443
- path: 路径,网络资源在服务器中的指定地址
- parameters: 参数,用于指定访问某个资源时的附加信息
- query:查询,用于查询某类资源,若有多个查询则以 & 隔开
- fragment: 片段,对资源描述的部分补充
其中中括号代表可选部分
HTTP与HTTPS:
http(超文本传输协议),用于将超文本数据从网络传输到本地
https:简单的讲时http的安全版,在http下加入SSL层,简称HTTPS
请求
请求分为四部分:请求方法、请求网址、请求头、请求体
请求方法
用于标识请求客户端请求服务端的方式,常见的有两种: GET 与 POST
GET: 参数包含在URL中,数据可以在URL中看到,且最多提交1024字节数据
POST:数据以表单形式传输,包含于请求体,无字节数限制

请求网址
即URL
请求头
用于说明服务器要使用的附加信息
| Accept | 请求报头域,用于指定客户端可接受哪些类型的信息 |
| Accept-Language | 指定客户端可接受的语言类型 |
| Accept-Encoding | 指定客户端可接受的内容编码 |
| Host | 指定请求资源的主机IP于端口号,其内容为请求URL的原始服务器或网关的位置 |
| Cookie | 维持当前会话,自动登录是它的功劳 |
| Refer | 标识请求从哪个页面发过来 |
| User-Agent | 使服务器识别客户端使用的操作系统及版本、浏览器的等信息,爬虫时一般需要用此信息进行伪装 |
| Content-Type | 表示具体请求中的媒体类型信息 |
请求体
一般承载POST请求中的表单数据,对于GET来说,请求体为空
content-type与POST提交的关系
| Content-Type | 提交数据的方式 |
|---|---|
| application/x-www-form-urlencoded | 表单数据 |
| multipart/form-data | 表单文件上传 |
| application/json | 序列化JSON数据 |
| text/xml | XML数据 |
响应
包括:响应状态码、响应头、响应体
响应状态码:表示服务器响应状态
| 状态码 | 说明 | 详情 |
|---|---|---|
| 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 | 请求URL过长 | 请求网址过长,服务器无法处理 |
| 415 | 不支持类型 | 请求格式不被请求页面支持 |
| 416 | 请求范围不符 | 页面无法提供请求的范围 |
| 417 | 未满足期望值 | 服务器未满足期望值请求标头字段的要求 |
| 500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
| 501 | 未实现 | 服务器不具备完成请求的能力 |
| 502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应 |
| 503 | 服务不可用 | 服务器目前无法使用 |
| 504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
| 505 | HTTP版本不支持 | 服务器不支持请求中所用的HTTP协议版本 |
响应头
响应头包含了服务器对请求的应答信息
| Date | 标识响应产生时间 |
| Last-Modified | 指定资源最后修改时间 |
| Content-Encoding | 指定响应内容的编码 |
| Server | 包含服务器信息 |
| Content-Type | 文档类型,指定返回的数据是什么类型 |
| Set-Cookie | 设置Cookie |
| Expires | 用于指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中 |
响应体
响应的正文数据都位于响应体中,可以说是响应最关键的部分,可以获得网页的HTML代码等
爬虫基本原理
- 获取网页:获得HTML源码,可使用urllib、requests
- 提取信息:解析源代码,可用BeautifulSoup pyquery、lxml
- 保存数据:txt/json或者数据库
- 自动化程序:使爬虫高效进行
Session和Cookie
Session
中文名为会话,本义使有始有终的一系列动作、消息
在Web中,Session用于存储特定用户Sessuin所需属性及配置信息
Cookie
是某些网站为了鉴别用户身份、进行Session跟踪而存储在用户本地终端上的数据
Cookie的属性结构:
| Name | Cookie的名称,Cookie一旦创建,名称便不可变 |
|
Value |
Cookie的值 |
| Domain | 指定可以访问改Cookie的域名 |
| Path | Cookie的使用路径 |
| Max-Age | Cookie的失效时间,若为正数,则在Max-Age秒后失效,为负数,则在浏览器关闭时失效 |
| Size | Cookie的大小 |
| HTTP | Cookie的httponly属性,若为True,则只有在HTTP headers中才会带有此Cookie的信息 |
| Secure | 是否仅允许使用安全协议传输Cookie |

浙公网安备 33010602011771号