爬虫基础
HTTP基本原理
URI和URL
- URI(Uniform Resource Identifer):统一资源标识符
- URL(Uniform Resource Locator):统一资源定位符
- URL是URI的子集
超文本
- 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本
网络协议类型:HTTP和HTTPS
- HTTP(Hyper Text Transfer Protocol):超文本传输协议,是用于从网络传输超文本数据到本地浏览器的传送协议
- HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer):以安全为目标的HTTP通道
HTTPS的安全基础是SSL,主要作用为建立一个信息安全通道保证数据传输的安全和确认网站的真实性
- 其他网络协议还包括 ftp、sftp、smb 等
HTTP请求过程
- 向浏览器输入URL
- 浏览器向服务器发送请求
- 服务器对请求进行处理和解析,返回对应的响应
- 浏览器对服务器返回的响应进行解析,呈现页面
- 浏览器开发者工具
请求
请求由客户端向服务端发出,分为请求方法(Requests Method)、请求地址(Requests URL)、请求头(Requests Head)和请求体(Requests Body)。
请求方法
方法 | 描述 |
---|---|
GET | 请求页面,并返回页面内容 |
HEAD | 类似于GET请求,区别在于其返回的响应中没有具体内容,用于获取报头 |
POST | 大多用于提交表单或上传文件,数据包含在请求体中 |
PUT | 从客户端向服务器传送的数据取代指定文档中的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | 把服务器当作跳板,让服务器代替客户端访问其他网页 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
- 常见的请求方法有GET和POST两种
- GET请求中的参数包含在URL内,数据可通过URL看到;POST请求的参数包含在请求头中,不会在URL内体现
- GET请求提交的数据最多只有1024字节,而POST方式没有限制
请求地址
- 请求的地址,即统一资源定位符URL
请求头
请求头,用于说明服务器要使用的附加信息
- Accept:请求报头域,用于指定客户端可接受哪些信息
- Accept-Language:指定客户端可接受的语言类型
- Accept-Encoding:指定客户端可接受的内容编码
- Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务或网关的位置
- Coocies:网站为了辨别用户进行会话跟踪而储存在用户本地的数据,主要功能是维持当前会话
- Referer:标识请求来源页面
- User-Agent:简称UA,可使服务器识别客户使用的操作系统及版本、浏览器及版本信息(爬虫可利用此信息伪装浏览器)
- Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型(Mime-Type),在HTTP协议消息头中表示具体请求中的媒体类型信息(例如text/html代表HTML格式more)
请求体
- GET请求的请求体为空
- POST请求的请求体一般承载的内容是请求中的表单数据
Content-Type | POST提交数据的方式 |
---|---|
application/x-www-form-urlencoded | 表单数据 |
multipart/form-data | 表单文件上传 |
application/json | 序列化JSON数据 |
text/xml | XML数据 |
响应
响应由服务端返回给客户端,分为响应状态码(Response Status Code)、响应头(Response Headers)和响应体(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 | 请求URL过长 | 请求网址过长,服务器无法处理 |
415 | 不支持类型 | 请求格式不被请求页面支持 |
416 | 请求范围不符 | 页面无法提供请求的范围 |
417 | 未满足期望值 | 服务器未满足期望请求标头字段的要求 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应 |
503 | 服务不可用 | 服务器目前无法使用 |
504 | 网关超时 | 服务器作为网关或代理,没有及时从上游服务器收到请求 |
505 | HTTP版本不支持 | 服务器不支持请求中所用的HTTP协议版本 |
响应头
响应头包含了服务器对请求的应答信息
- Date:标识响应产生的时间
- Last-Modified:指定资源的最后修改时间
- Content-Ecoding:指定响应内容的编码
- Server:包括服务器的信息,如名称、版本号等
- Content-Type:文档类型
- Set-Cookie:设置Cookies。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求
- Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中
响应体
响应的正文数据在响应体中
- 浏览器开发者工具“preview”中可预览网页源代码,即响应体的内容。这也是爬虫解析的目标
网页基础
网页的组成
网页可分为三大部分:HTML、CSS和JavaScript,HTML定义网页的内容结构、CSS描述网页的布局、JavaScript定义了网页的行为
HTML
- HTML(Hyper Text Markup Language)即超文本标记语言
- 不同的元素通过不同的标签标示,这些标签定义的节点元素相互嵌套和组合形成了复杂的层次关系,形成了网页的架构
CSS
- CSS(Cascading Style Sheets)即层叠样式表,是目前惟一的网页页面排版样式标准,能够对网页中元素位置的排版进行像素级精确控制
JavaScript
- JavaScript简称JS,是一种脚本语言,用来给HTML网页增加动态功能
网页的结构
- 一个网页的标准形式是html标签内嵌套head和body标签,head标签内定义网页的配置和引用,body标签定义网页的正文
节点树
在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树
- DOM(Document Object Model)即文档对象模型,是W3C的标准,它定义了访问HTML和XML文档的标准
- 文档对象模型是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式
W3C DOM标准被分为3个不同的部分
- 核心DOM:针对任何结构化文档的标准模型
- XML DOM:针对XML文档的标准模型
- HTML DOM:针对HTML文档的标准模型
根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点
- 整个文档是一个文档节点
- 每个HTML元素是元素节点
- HTML元素内的文本是文本节点
- 每个HTML属性是属性节点
- 注释是注释节点
HTML DOM将HTML文档视为树结构,这种结构被称为节点树
- 节点树中的节点彼此拥有层级关系,父节点(parent)拥有子节点(child),同级的节点被称为兄弟节点(sibling)
- 节点树中,顶端节点称为根(root),除了跟节点外每个节点都有父节点,同时可拥有任意数量的子节点或兄弟节点
选择器
CSS选择器用于定位节点
-
开头(#id)代表选择id,其后紧跟id的名称
- .开头(.class)代表选择class,其后紧跟class的名称
- element 是根据标签名筛选
- CSS选择器支持嵌套选择,各个选择器之间加空格可代表嵌套关系,若不加空格则代表并列关系
爬虫的基本原理
爬虫就是获取网页并提取和保存信息的自动化程序
基于HTTP或HTTPS协议的URL对应的数据,爬虫皆可抓取
由JavaScript渲染的网页,可分析其后台Ajax接口,或使用Selenium、Splash等库来模拟JavaScript渲染
会话和Cookies
- 静态网页:静态网页是文字、图片等内容均通过既定的HTML代码指定的页面
- 动态网页:动态网页是可动态解析URL中参数的变化,管理数据库并动态呈现不同的内容的页面
- 无状态HTTP:HTTP的无状态是指HTTP协议对事务的处理缺少状态记录,服务器不会记录请求过程前后的状态变化
- 会话:在Web中会话对象用来存储特定用户会话所需的属性及配置信息
- Cookies:Cookies是指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据
Cookies的属性结构
- Name:Cookie的名称,一旦创建便不可修改
- Value:Cookie的值
- Domain:可以访问Cookie的域名
- Max Age:Cookie失效时间
- Path:Cookie的使用路径,如果设置为/,则本域名下所有页面都可以访问该Cookie
- Size字段:Cookie的大小
- HTTP字段:Cookie的httponly属性,若为true,则只有在HTTP头中会带有此Cookie信息,而不能通过document.cookie来访问该Cookie
- Secure:该Cookie是否被使用安全协议传输
代理的基本原理
代理服务器(proxy server)的功能是代理网络用户去取得网络信息。
代理的作用
- 突破自身IP访问限制
- 访问某些内部资源
- 提高访问速度
- 隐藏真实IP