爬虫概念
-
概念
网络爬虫也叫网络蜘蛛,特指一类自动批量下载网络资源的程序,这是一个比较口语化的定义。
更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序. -
作用
数据采集,搜索引擎,模拟操作
- 分类
通用爬虫:搜索引擎的重要组成成分
聚焦爬虫:建立在通用爬虫的基础上,抓取页面当中指定的数据
HTTP与HTTPS
robots协议—君子协议
网络架构
-
c/s 即 client server — 客户端与服务端
-
b/s 即 browser server — 浏览器与服务端
-
m/s 即 mobile server — 移动端与服务端
HTTP协议
计算机之间也是需要一种规则,保障之间信息的有效交流,这就是HTTP协议
概念及特点
概念
http
- HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW: World Wide Web )服务器传输超文本到本地浏览器的传送协议。是以明文的方式在网络当中传递数据。目前互连网上90%的网络传输都是基于http协议。
https
- HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层
特点
http 端口80
-
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
**https ** 端口443
- 内容加密建立一个信息安全通道,来保证数据传输的安全;
- 身份认证确认网站的真实性
- 数据完整性防止内容被第三方冒充或者篡改
三次握手,四次挥手
三次握手 —创建连接
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
四次挥手 — 断开连接
第一次挥手: 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
第二次挥手: 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
第三次挥手: 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手: 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
三次握手: 就是在前端发送请求报文之前, 确定一下是不是双方都 “在线”
四次挥手: 就是在后端发送完毕响应之后, 双方告知一下纷纷 “下线”
认识url
发送http请求时,通过URL对网络资源进行定位。
URL(Uniform Resource Locator),中文叫统一资源定位符。是用来标识某一处资源的地址。也 即是我们常说的网址
HTTP请求格式
请求行
根据http标准,http请求可以使用多种请求方法。
1.定义了三种请求方法:GET,POST和HEAD方法
1.新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
常用方法
- GET
1.主要是负责从服务器获取数据
2.URL中添加请求参数,显示在地址栏
3.请求字符串限制 1024个字节
比POST
更加高效和方便。 - POST
1.主要负责向服务器提交数据
2.没有大小限制
比’GET’传递数据量大,安全性高。
请求头
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
- User-Agent:产生请求的浏览器类型;
- referer:防盗链,页面跳转处,表明产生请求的网页来自于哪个URL,告诉服务器我是从哪个链接过来的
- Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;
- Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;
- Accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ / ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;
- Accept-Language:客户端可接受的自然语言;
- Accept-Encoding:客户端可接受的编码压缩格式;
- Accept-Charset:可接受的应答的字符集;
- connection:连接方式(close 或 keepalive);
- Content-Length:发送给HTTP服务器数据的长度。
- Content-Type:具体请求的媒体的类型信息,力图 text/html 代表HTML格式,image/gif代表gif图片,application/json代表Json类型
- charset:编码格式
- Content-Range:响应资源的范围。可以在每次请求中标记请求的资源范围,在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,实现断点续传。
- Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Contro并不会修改另一个消息消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、man-age、max-stake、min-fresh、only-if-cached;响应消息中的指令包括 public、privete、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age
空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;
请求体
请求体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length;
状态行
状态行由 HTTP 协议版本、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;
-
状态码 由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示;
-
1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
-
2xx:表示服务器已成功接收到请求并进行处理;
-
3xx:表示服务器要求客户端重定向;
-
4xx:表示客户端的请求有非法内容;
-
5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
-
-
200 OK:表示客户端请求成功;
-
400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;
-
401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;
-
403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
-
404 Not Found:请求的资源不存在,例如,输入了错误的URL;
-
500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;
-
503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;
会话技术
http是无状态的,那服务端怎么区分同一个用户的连续请求呢,这就用到了会话技术:cookie和session。
概念
-
Cookie有时也用其复数形式 Cookies。
指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。 -
Cookie 可以理解为一个凭证
1.实际是由服务器发给客户端的特殊信息,
2.这些信息以文本文件的方式存放在客户端,
3.客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
服务器在接收到Cookie以后,会验证Cookie的信息,以此来辨别用户的身份。
Session中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。这个词在各个领域都有在使用,而我们web领域,一般使用的是其本义,一个浏览器窗口从打开到关闭这个期间。
Session的目的则是,在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。
而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此session是基于cookie的.
Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionId来进行判定,所以相对于Cookie,Session的安全性更高。
cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此session是基于cookie的.
Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionId来进行判定,所以相对于Cookie,Session的安全性更高。
一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效。