爬虫基础
HTTP原理
-
URI和URL和URN
- URI的全称为Uniform Resource Identifier,即统一资源标识符,URI包括URL和URN
- URL的全称为Universal Resource Locator,即统一资源定位符,URL是URI的子集,每个URL都是URI,但不是每个URI都是URL
- URN的全称为Universal Resource Name,即统一资源名称,URN只命名资源而不指定如何定位资源
-
小总结
URI / \ URL URN
-
超文本
- 我们在浏览器看到的网页就是超文本解析而成的,而网页的源代码HTML就可以称作超文本
-
HTTP和HTTPS
- http和https是访问资源需要的协议类型
- HTTP的全称是Hyper Text Transfer Protocol,中文名叫做超文本传输协议,HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议
- HTTPS的全称是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的
-
HTTP请求过程
- 这个过程是浏览器向网站所在的服务器放松了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的相应,接着传回给浏览器
-
请求
- 请求:由客户端向服务端发出,可以分为4部分内容:
- 请求网址
- 请求方法:GET和POST,两者有如下区别
- GET请求中的参数包含在URL里面,数据可以在URL中看到,而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中
- GET请求提交的数据最多只有1024字节,而POST方式没有限制
- 请求头:
- Accept:请求报头域
- Accept-Language:指定客户端可接受的语言类型
- Accept-Encoding:指定客户端可接受的内容编码
- Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置
- Cookie:为了辨别用户进行绘画跟踪而存储在用户本地的数据
- Referer:此内容用来标识这个请求是从那个页面发过来的
- User-Agent:在做爬虫时加上此信息,可以伪装为浏览器
- Content-Type:互联网媒体类型,它用来表示具体请求中的媒体类型信息
- 请求体
- 请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空
- 请求:由客户端向服务端发出,可以分为4部分内容:
-
响应
- 响应:由服务端返回给客户端,可以分为三部分:
- 响应状态码:响应状态码表示服务器的响应状态
- 响应头:响应头包含了服务器对请求的应答信息,下面简要说明一些常用的头信息
- Date:标识响应产生的时间
- Last-Modified:指定资源的最后修改时间
- Content-Encoding:指定响应内容的编码
- Server:包含服务器的信息,比如名称、版本名等
- Set-Cookie:设置Cookies,响应头的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求
- Expires:指定响应的过期时间
- 响应体:响应的正文数据都在响应体中
- 响应:由服务端返回给客户端,可以分为三部分:
-
网页基础
- 网页的组成:HTML,CSS和JavaScript
- HTML:是用来描述网页的一种语言,其全称叫做Hyper Text Markup Language,即超文本标记语言
- CSS:全称Cascading Style Sheets,即层叠样式表
- JavaScript:是一种脚本语言,实现了一种实时,动态,交互的页面功能
- HTML定义了网页的内容和结构,CSS描述了网页的布局,JavaScript定义了网页的行为
- 网页的结构:
- 开头用DOCTYPE定义了文档类型
- 其外层是html标签,最后还有对应的结束标签来表示闭合
- 其内部是head标签和body标签,分表代表网页头和网页体,它们也需要结束标签
- head标签内定义了一些页面的配置和引用
- 网页的组成:HTML,CSS和JavaScript
-
爬虫基本原理
- 爬虫就是获取网页并提取和保存信息的自动化程序
- JavaScript渲染页面:
- 有时候,我们在用urlli或requests抓取网页时,得到的源代码实际和浏览器中看到的不一样,这是因为我们在用urllib或requests等库请求当前页面时,得到的只是这个HTML代码,并不会得到之后在JavaScript所渲染的内容
-
会话和Cookies
- 无状态HTTP:HTTP的无状态是指HTTP协议对事务处理是没有记忆能力的,服务器不会记录前后状态的变化
- 会话:
- 会话,其本来的含义是指有始有终的一系列动作/消息,如果用户还没有会话,则web服务器将自动创建一个会话对象
- 会话在服务器端也就是网站的服务器,用来保存用户的会话消息
- Cookies:
- Cookies指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据
- Cookies在客户端,也可以理解为浏览器端,有了Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器
- 会话控制:
- 当客户端第一次请求服务器时,服务器会返回一个请求头中带有Set-Cookie字段的响应给客户端,用来标记是哪一个用户,客户端浏览器将Cookies保存起来
- 当浏览器下一次请求该网站时,浏览器会把此Cookies放到请求头中一起提交给服务器,Cookies携带了会话ID信息,服务器检查该Cookies即可找到对应的会话是什么,然后再判断会话来以此辨认用户状态
- Cookies和会话需要配合,一个在客户端,一个在服务端,二者共同协作,就实现了登陆会话控制
- 属性结构
- Name:Cookie的名称,一旦创建,该名称便不可更改
- Value:Cookie的值
- Domain:可以访问该Cookie的域名,比如:如果设置为zhihu.com,则所有以zhihu.com结尾的域名都可以访问该Cookie
- Max Age:该Cookie失效的时间,单位为秒,Max Age如果为正数,则该Cookie在Max Age秒之后失效,如果为负数,则关闭浏览器时Cookie失效,浏览器也不会以任何形式保存该Cookie
- Path:该Cookie的使用路径,如果设置为/path/,则只有路径为/path/的页面可以访问该Cookie。如果设置为/,则本域名下的所有页面都可以访问该Cookie
- Size字段:此Cookie的大小
- HTTP字段:Cookie的httponly属性,若此属性为true,则只有在HTTP头中会带有此Cookie的信息,而不能通过document.cookie来访问此Cookie
- Secure:该Cookie是否仅被使用安全协议传输,安全协议有HTTPS和SSL等,在网络上传输数据之前先将数据加密。默认为false
- 会话Cookie和持久Cookie
- 会话Cookie:把Cookie保存在浏览器内存中,只存在于浏览器会话期间
- 持久Cookie:保存到客户端硬盘中,下次还可以使用
- 严格来说,并没有会话Cookie和持久Cookie,只是由Cookie的Max Age或Expires字段决定了过期时间
-
代理的基本原理
- 代理实际上指的就是代理服务器
- 如果使用了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机