爬虫基本原理
爬虫概述
爬虫就是获取网页并提取和保存信息的自动化程序
1、获取网页
Python提供很多库函数如urllib、requests等,可以用这些库函数完成http网页请求,并将网页源码内容保存到对应库函数的结构体中。
2、提取信息
在获取到网页信息之后,就是分析源代码,从中获取我们想要的数据。最常用的方式就是正则表达式,同时存在一些库函数可以高效的获取信息。
3、保存数据
可以简单保存为TXT文本或者JSON文本,方便后续使用。
4、自动化程序
静态网页和动态网页
静态网页:网页内容是由HTML代码编写,文字、图片等内容均通过写好的HTML代码来指定。
静态网页加载速度快、编写简单,但是可维护性差,不能根据URL灵活多变的显示内容。
动态网页:可以动态解析URL中的参数变化,关联数据库并动态呈现不同的页面内容,非常灵活多变,我们现在看到的网站基本几乎都是动态网页。
无状态HTTP
HTTP的无状态是指HTTP协议对事物的处理是没有记忆的,或者说服务器并不知道客户端处于什么状态。服务器不会记录客户端前后状态的变化,如果需要处理前面的信息,客户端就必须要重传,导致需要额外传递一些重复的请求,太浪费资源了。
为了解决该问题,出现了Session和Cookie两项技术。
- Session:在服务端,也就是网站的服务器,用来保存用户的Session信息;
- Cookie:在客户端,也就是网页浏览器,有了Cookie,浏览器在下次访问相同页面时就会自动附带上它,并发送给服务器,服务器通过识别Cookie鉴定出是哪个用户在访问,然后判断用户是否处于登陆状态,并返回对应的相应。
在爬虫的过程中,一般会直接将登陆成功后获取的Cookie放在请求头里面直接请求,而不重新模拟登陆。
Cookie
指某些网站为了鉴别用户身份、进行Session跟踪而存储在用户本地终端上的数据
Session维持原理
在客户端第一次请求服务器时,服务器会返回一个响应头中带有Set-Cookie字段的响应给客户端,这个字段用来标记用户。客户端浏览器会把Cookie保存起来,下次请求相同的网站时,把保存的Cookie放到请求头中一起提交给服务器。Cookie中携带着Session ID相关的信息,服务器通过检查Cookie即可找到对应的Session,继而通过判断Session辨认用户状态。

Cookie属性结构
已知乎网站为例,在浏览器开发者工具中打开,在Storage部分存在Cookie信息。
注:如在Safari浏览器中没有显示页面源文件选项,则需要在设置->高级->显示网页开发者功能。

关键属性如下:
- Name:Cookie的名称,一旦创建便不可更改;
- Value:Cookie的值,为字符编码(Unicode字符)或二进制数据(BASE64);
- Domain:指定可以访问该Cookie的域名;
- Path:Cookie的使用路径,如果设置为/path/,则只有路径为/path/的页面才可以访问该Cookie,如果设置为/,则本域名下的所有页面都可以访问该Cookie;
- Max-Age:Cookie失效时间,单位为秒,一般和Expires一起使用,可以通过此属性算出Cookie的有效时间;
- http:Cookie的http only属性,若此属性为true,则只有在HTTP Headers中才会带有此Cookie信息,而不能通过document.cookie来访问此Cookie;
- Secure:是否允许使用安全协议传输Cookie,主要有HTTPS和SSL等,默认值是false。
关闭浏览器的时候并不代表关闭对应的Session,浏览器不会主动在关闭之前通知服务器自己将要被关闭,所以服务器压根不会有机会知道浏览器已经关闭。
之所以产生这种误解,主要是大部分网站使用会话Cookie来保存Session ID信息,而浏览器关闭之后Cookie就消失了,再次打开的时候就无法找到原来的Session,如果把服务器设置的Cookie保存到硬盘上,再次访问的时候把原来的Cookie发送给服务器,那么就能找到原来的Session保持登陆状态。
正是因为关闭浏览器不会导致会话被删除,因此服务器会设置一个失效时间,节省存储空间。
代理的基本原理
代理实际上就是指代理服务器(Proxy Server),功能是代网络用户取得网络信息。

在爬虫过程中,主要是通过代理隐藏自己的真实IP,不断更换代理,防止自身的IP被封锁。
代理的分类
根据协议区分
- FTP代理服务器:主要用于访问FTP服务器,一般有上传、下载以及缓存功能,端口一般为21、2121等。
- HTTP代理服务器:主要用于访问加密网站,一般有内容过滤和缓存功能,端口一般为80、8080等。
- SSL/TLS代理:

浙公网安备 33010602011771号