爬虫基本原理
爬虫的基本原理是基于网站网络协议,根据网址批量获取到网页上的信息操作过程。简单一点说就是用计算机程序来模拟人工点击网页获取数据的过程。
本教程将通过网络协议介绍、http请求流程、网页中的请求与返回、爬虫工作过程来为大家详细介绍爬虫是如何展开工作的。
-
网络协议
我们经常会在URL的首部会看到http或者https,这个就是访问资源需要的协议类型,爬虫常用的是http和https协议。
http(HyperText Transfer Protocol )超文本传输协议,是互联网上应用最为广泛的一种网络协议。http是可靠的数据传输协议,由于它是短链接的,也就是一次请求,一次响应断开,所以它表现处无状态的现象。
https ( Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的 HTTP 通道,可以理解为是HTTP的安全版,即 HTTP 下加入 SSL 层,简称为 HTTPS。HTTPS的安全基础是SSL,所以他传输的内容都是经过SSL加密的,它的主要作用:
1.建立一个信息安全通道,来保证数据的传输安全。
2.确认网站的真实性,凡是使用了 https 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过 CA 机构颁发的安全签章来查询。
HTTP和HTTPS的区别:
1.https协议需要到ca申请证书,一般免费证书很少,需要交费。
2.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
- HTTP/HTTPS请求流程
一次HTTP请求操作,其过程可分为4步:
1.在浏览器地址栏(或点击一个超链接)HTTP的工作就开始了;
2.建立连接后,客户端向服务器端发送一个请求;
3.服务器接受到请求后,给其响应;
4.客户端浏览器接受响应之后,在用户的浏览器渲染显式。然后客户端和服务器端断开连接。
HTTPS是基于HTTP的,不同的是他在TCP/IP协议上面又新加了一层SSL。一次HTTPS请求操作,其过程可分为6步:
1、客户端发送请求https连接;
2、服务器返回加密公钥,通常是SSL证书;
3、客户端从这个SSL证书解析出公钥,并随机生成一个key,通过公钥加密这个key发送给服务器(这一步是安全的因为只有服务器才有私钥能读出这个key);
4、服务器通过私钥解密出key;
5、客户端使用这个key来加密需要传输的数据;
6、服务器使用key来解析数据。
- 网页中的请求与返回
打开任何一个网页,F12,选择Network,清除后刷新,就会出来一系列的请求数据。
Headers是网络协议请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。
request headers可以理解为用于在请求消息中向服务器传递附加信息,主要包括客户机可以接受的数据类型,压缩方法,语言,以及客户计算机上保留的信息和发出该请求的超链接源地址等。以下为request headers属性简介:
属性名称 |
意义 |
示例 |
Accept |
指定客户端能够接收的内容类型 |
Accept: */* |
Accept-Encoding |
指定浏览器可以支持的web服务器返回内容压缩编码类型 |
Accept-Encoding: gzip, deflate, br
|
Accept-Language |
浏览器所希望的语言种类 |
|
Cache-Control |
缓存机制 |
Cache-Control: max-age=0 |
Connection |
表示是否需要持久连接。(HTTP 1.1默认进行持久连接) |
Connection: keep-alive
|
Cookie |
HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 |
|
Host |
指定请求的服务器的域名和端口号 |
Host: www.baidu.com |
Referer |
包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。 |
|
From |
请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 |
|
response headers可以理解为用于在http请求中服务器向浏览器传递附加信息,主要包括服务器传递的数据类型,使用的压缩方法,语言,以及服务器的信息和响应该请求的时间等。以下为Response 属性:
属性名称 |
意义 |
示例 |
Accept-Ranges |
Web服务器表示自己是否接受获取某个实体的一部分(比如文件的一部分)的请求 bytes:接受 none:不接受 |
Accept-Ranges:bytes |
Access-Control-Allow-Origin |
指定哪些网站可以跨域源资源共享 |
Access-Control-Allow-Origin:* |
age |
响应对象在代理缓存中存在的时间,以秒为单位 |
Age:234585576 |
Access-Control-Allow-Methods |
允许的http请求方法 |
Access-Control-Allow-Methods: POST, GET, OPTIONS |
Allow |
Allow支持标题列出资源集合的方法。 |
Allow: GET, POST, HEAD |
Connection |
告诉WEB服务器或者代理服务器,在完成本次请求的响应 后,该做什么 close:断开连接,不要等待本次连接的后续请求了 keep-alive:保持连接,等待本次连接的后续请求 |
Connection: keep-alive
|
Cache-Control |
通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒 no-cache:可以在本地进行缓存,但是每次发起请求都需要到服务器去验证一下,如果服务器返回告诉你可以使用本地缓存,你才可以去使用本地的缓存 no-store:本地不可进行缓存的,每次发起请求,都需要去服务端去拿去数ju public:在HTTP请求返回的内容经过的所有路径中,都可以对返回内容进行一个缓存的操作。 private:只有发起请求的浏览器才可以进行缓存 max-age=<seconds>:缓存多少秒之后才会过期。 s-maxage=<seconds>:它会替代max-age,但是只有在 代理服务器中才会起作用。 max-stale=<seonds>:当我们缓存过期以后,如果有max-stale,只要在max-stale这个时间之内,还会使用过期的缓存。只有在发起端设置才有用,在服务端设置没有用。 must-revalidate:如果我们的和缓存过期了,我们必须重新发送到源服务端,重新获取这部分数据,来验证这部分数据是否真的过期了 proxy-revalidate:用在缓存服务器中,缓存过期后,必须要去源服务器上重新请求一次,而不能使用本地的缓存 |
Cache-Control:no-cache |
Content-Type |
服务器告诉浏览器它发送的数据属于什么文件类型,也就是响应数据的MIME类型 type:主类型,任意的字符串,如text,如果是*号代表所有; subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开; parameter:可选参数,如charset,boundary等。 |
Content-Type: application/json;charset=utf-8 |
content-length |
响应数据的数据长度,单位是byte |
content-length: 0 |
Content-Encoding |
服务器采用哪种编码格式传输正文 其值有:gzip;x-gzip;compress等 |
Content-Encoding:gzip |
Date |
响应消息发送的GMT格式日期 |
date: Mon, 06 May 2019 22:48:29 GMT
|
ETag |
就是一个对象(比如URL)的标志值 主要供 WEB 服务器 判断一个对象是否改变了 |
|
Expired |
告诉客户端该响应数据会在指定的时间过期,通常用于给客户端缓存作为参考。 |
expires: Thu, 28 Jun 2018 11:27:53 GMT
|
via |
告诉客户端,该回应经历了那些代理。 |
Via: 1.0 example1.com, 1.1 example2.com (Apache/1.1) |
status |
返回的状态码 |
Status:200 |
Server |
服务器名称 |
|
页面数据的获取,其实就是从客户端发送请求到服务器,然后由服务器根据请求返回数据的过程,这也是爬虫抓取数据的基本原理。
- ForeSpider爬虫工作过程
1.获取网页数据
爬虫的获取页面其实是获取网页源代码,然后从中提取我们想要的数据。
ForeSpider爬虫工具中已经搭建好了抓取的脚本框架,只需要按照人工点击进入页面的过程在爬虫软件中进行配置体现即可。
案例一:采集凤凰网每日要闻
人工:打开网站→点击新闻列表中某个新闻→打开新闻看到数据。
爬虫:创建任务→抽取新闻列表链接→抽取数据。
如下图所示:
案例二:采集孔夫子旧书网所有分类的旧书信息
人工:选择某图书类别→点击某类别图书列表中某一本→打开图书界面,看到数据。
爬虫:抽取所有分类链接→抽取某分类所有列表链接→抽取数据。
2.采集数据
配置好爬虫后,点击开始采集。以案例二为例,如下图所示:
- 导出数据
采集完数据以后可以直接导出数据为csv/excel格式。