网页前端基础

HTTP请求方式与过程

爬虫在爬取数据时将会作为客户端模拟整个HTTP通信过程,该过程也需要通过HTTP协议实现。HTTP请求过程如下。

  • 由HTTP客户端向服务器发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。
  • HTTP服务器从该端口监听客户端的请求。
  • 一旦收到请求,服务器会向客户端返回一个状态,比如“HTTP/1.1 200 OK”,以及返回的响应内容,如请求的文件、错误消息、或其它信息。

1. 请求方法

  • 在HTTP/1.1协议中共定义了8种方法(也叫“动作”)来以不同方式操作指定的资源,常用方法有GET、HEAD、POST等。
请求方法 方法描述
GET 请求指定的页面信息,并返回实体主体。GET可能会被网络爬虫等随意访问,因此GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中
HEAD 与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回具体的内容,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中该资源的相关信息(元信息或称元数据)
POST 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据会被包含在请求中,这个请求可能会创建新的资源或修改现有资源,或二者皆有
PUT 从客户端上传指定资源的最新内容,即更新服务器端的指定资源。

2. 请求(request)与响应(response)

HTTP协议采用了请求/响应模型。

  • 客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。
  • 服务器以一个状态行作为响应,响应的内容包括协议的版本、响应状态、服务器信息、响应头部和响应数据。

    客户端与服务器间的请求与响应的具体步骤如下。
  • 连接Web服务器:由一个HTTP客户端发起连接,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
  • 发送HTTP请求:客户端经TCP套接字向Web服务器发送一个文本的请求报文。
  • 服务器接受请求并返回HTTP响应:Web服务器解析请求,定位该次的请求资源。之后将资源复本写至TCP套接字,由客户端进行读取。
  • 释放连接TCP连接:若连接的connection模式为close,则由服务器主动关闭TCP连接,客户端将被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间。
  • 客户端解析HTML内容:客户端首先会对状态行进行解析,之后解析每一个响应头,最后读取响应数据。

    Request

  • 请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
  • 请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一确定。
  • 请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
  • 请求体:请求时额外携带的数据,如表单提交时的表单数据

    Response

  • 响应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误
  • 响应头:如内容类型、内容长度、服务器信息、设置Cookie等等。
  • 响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

    常见HTTP状态码

    1. HTTP状态码种类

    HTTP状态码是用来表示网页服务器响应状态的3位数字代码,按首位数字分为5类状态码。
状态码类型 状态码意义
1XX 表示请求已被接受,需接后续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束
2XX 表示请求已成功被服务器接收、理解并接受
3XX 表示需要客户端采取进一步的操作才能完成请求。通常用来重定向,重定向目标需在本次响应中指明
4XX 表示客户端可能发生了错误,妨碍了服务器的处理。
5XX 表示服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器以当前的软硬件资源无法完成对请求的处理。

2. 常见HTTP状态码

HTTP状态码共有67种状态码,常见的状态码如下。

常见状态码 状态码含义
200 OK 请求成功,请求所希望的响应头或数据体将随此响应返回。
400 Bad Request 由于客户端的语法错误、无效的请求或欺骗性路由请求,服务器不会处理该请求
403 Forbidden 服务器已经理解该请求,但是拒绝执行,将在返回的实体内描述拒绝的原因,也可以不描述仅返回404响应
404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求
500 Internal Server Error 通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理,不会给出具体错误信息
503 Service Unavailable 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是暂时的,并且将在一段时间以后恢复

HTTP头部信息

HTTP头部信息(HTTP header fields)是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分。头部信息定义了一个超文本传输协议事务中的操作参数。在爬虫中需要使用头部信息向服务器发送模拟信息,通过发送模拟的头部信息将自己伪装成一般的客户端。

1. HTTP头部类型

HTTP头部类型按用途可分为:通用头,请求头,响应头,实体头。

  • 通用头:既适用于客户端的请求头,也适用于服务端的响应头。与HTTP消息体内最终传输的数据是无关的,只适用于要发送的消息。
  • 请求头:提供更为精确的描述信息,其对象为所请求的资源或请求本身。新版HTTP增加的请求头不能在更低版本的HTTP中使用,但服务器和客户端若都能对相关头进行处理,则可以在请求中使用。
  • 响应头:为响应消息提供了更多信息。例如,关于资源位置的描述Location字段,以及关于服务器本身的描述使用Server字段等。与请求头类似,新版增加的响应头也不能在更低版本的HTTP版本中使用。
  • 实体头:提供了关于消息体的描述。如消息体的长度Content-Length,消息体的MIME类型Content-Type。新版的实体头可以在更低版本的HTTP版本中使用。
字段名 说明 示例
Accept 可接受的响应内容类型(Content-Types) Accept: text/plain
Accept-Charset 可接受的字符集 Accept-Charset:utf-8
Accept-Encoding 可接受的响应内容的编码方式 Accept-Encoding:gzip,deflate
Accept-Language 可接受的响应内容语言列表 Accept-Language:en-US
Cookie 由之前服务器通过Set-Cookie设置的一个HTTP协议Cookie Cookie:$Version=1;Skin=new;
Referer 设置前一个页面的地址,并且前一个页面中的连接指向当前请求,意思就是如果当前请求是在A页面中发送的,那么referer就是A页面的url地址 Referer:https://blog.yinuxy.com
User-Agent 用户代理的字符串值 User-Agent:Mozilla/5.0(X11;Linuxx86_64;rv:12.0)Gecko/20100101Firefox/21.0

熟悉Cookie

  • HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,在数据传输完成后,本次的连接将会关闭,并不会留存相关记录。
  • 服务器无法依据连接来跟踪会话,也无法从连接上知晓用户的历史操作。这严重阻碍了基于Web应用程序的交互,也影响用户的交互体验。
  • 某些网站需要用户登录才进一步操作,用户在输入账号密码登录后,才能浏览页面。对于服务器而言,由于HTTP的无状态性,服务器并不知道用户有没有登录过,当用户退出当前页面访问其他页面时,又需重新再次输入账号及密码。

1. Cookie机制

为解决HTTP的无状态性带来的负面作用,Cookie机制应运而生。Cookie本质上是一段文本信息。

  • 当客户端请求服务器时,若服务器需要记录用户状态,就在响应用户请求时发送一段Cookie信息。
  • 客户端浏览器会保存该Cookie信息,当用户再次访问该网站时,浏览器会把Cookie做为请求信息的一部分提交给服务器。
  • 服务器对Cookie进行验证,以此来判断用户状态,当且仅当该Cookie合法且未过期时,用户才可直接登录网站。

2. Cookie的存储方式

Cookie由用户客户端浏览器进行保存,按其存储位置可分为内存式存储和硬盘式存储。

  • 内存式存储将Cookie保存在内存中,在浏览器关闭后就会消失,由于其存储时间较短,因此也被称为非持久Cookie或会话Cookie。
  • 硬盘式存储将Cookie保存在硬盘中,其不会随浏览器的关闭而消失,除非用户手工清理或到了过期时间。由于硬盘式Cookie存储时间是长期的,因此也被称为持久Cookie。

    3. Cookie的实现过程

    客户端与服务器间的Cookie实现过程的具体步骤如下。
  • 客户端请求服务器:客户端请求网站页面
  • 服务器响应请求:Cookie是一种字符串,为key=value形式,服务器需要记录这个客户端请求的状态,在响应头中增加一个Set-Cookie字段。
  • 客户端再次请求服务器:
    客户端会对服务器响应的Set-Cookie头信息进行存储。
    当再次请求时,将会在请求头中包含服务器响应的Cookie信息。

可抓取的数据

  • 网页文本:如HTML文档、Json格式文本等。
  • 图片:获取到的是二进制文件,保存为图片格式。
  • 视频:同为二进制文件,保存为视频格式即可。
  • 其他:只要是能请求到的,都能获取。
  • PayPal
  • AliPay
  • WeChatPay
  • QQPay
Donate

评论