天天看点

Python进阶爬虫——Class1:认识爬虫

知识点:

  1. 什么是爬虫
  2. HTTP与HTTPS
  3. url
  4. 会话技术

知识点说明:

1.什么是爬虫:

爬虫的定义:也叫网络蜘蛛,指一类自动批量下载网络资源的程序。

爬虫的作用:数据采集,搜索引擎,模拟操作

爬虫的分类:

  1. 通用爬虫:搜索引擎的组成成分
  2. 聚焦爬虫:在通用爬虫的基础上,抓取页面中指定数据(定向爬取)

2.HTTP与HTTPS:

robots协议:君子协议,网页中对于可用权限的定义协议。

网络架构:

  1. c/s:client server        客户端与服务端
  2. b/s:brows server       浏览器与服务端
  3. m/s:mobile server     移动端与服务端

HTTP协议:hyper text transfer protocol超文本传输协议,从万维网服务器传输超文本到本地浏览器的传送协议。端口80;简单快速,灵活。

HTTPS:hypertext transfer protocol over secure socket layer,以安全为目标的HTTP通道,HTTP下加入SSL层。端口443;安全,加密,防冒充或篡改

三次握手:创建连接

  1. 第一次握手:客户端发送syn包到服务器,进入syn_sent状态,等待服务器确认。

    SYN:同步序列编号synchronize sequence numbers

  2. 第二次握手:服务器收到syn包,确认客户的SYN,同时发送一个SYN包,即SYN+ACK包,服务器进入syn_recv状态
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,客户端和服务器进入ESTABLISHED状态(TCP链接成功)

四次挥手:断开链接

  1. 第一次挥手:客户端进程发出链接释放报文,停止发送数据。数据报文首部FIN=1,序列号为seq=u。此事客户端进入FIN-WAIT-1状态。TCP规定,FIN报文即时不携带数据,也消耗一个序号。
  2. 第二次挥手:服务器收到释放报文,发出确认报文,ACK=1,ack=u+1,并带上自己的序列号seq=v,此时服务端进入CLOSE-WAIT状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
  3. 第三次挥手: 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  4. 第四次挥手: 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

3.url:Uniform Resource Locator,统一资源定位符。是用来标识某一处资源的地址。也 即是我们常说的网址

HTTP请求格式:

请求行:三种请求方法(GET,POST,HEAD);新增五种请求方法(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类型
  • 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:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

4.会话技术: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的安全性更高。

    一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效。