python网络爬虫:网页前端基础

python网络爬虫

网页前端基础

概述

HTTP
  1. 概念

HTTP–Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。

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从客户端上传指定资源的最新内容,即更新服务器端的指定资源。

    如果可以直接获取到网页的源代码优先使用
    GET直接去进行HTTP的请求。
    如果需要从客户端向服务端传递相应数据,例如用户名密码,才能去访问,则需要用POST传递相应的表单数据。

  2. 请求(request)与响应(response)
    HTTP协议采用了请求/响应模型。

    客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。

    服务器以一个状态行作为响应,响应的内容包括协议的版本、响应状态(例如404,202)、服务器信息、响应头部和响应数据。

    在这里插入图片描述 客户端与服务器间的请求与响应的具体步骤如下

    连接Web服务器:由一个HTTP客户端发起连接,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。

    发送HTTP请求:客户端经TCP套接字向Web服务器发送一个文本的请求报文。

    服务器接受请求并返回HTTP响应:Web服务器解析请求,定位该次的请求资源。之后将资源复本写至TCP套接字,由客户端进行读取。

    释放连接TCP连接:若连接的connection模式为close,则由服务器主动关闭TCP连接,客户端将被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间。

    客户端解析HTML内容:客户端首先会对状态行进行解析,之后解析每一个响应头,最后读取响应数据。

  3. Request
    请求方式:主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。

    请求URL:URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一确定。

    请求头:包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
    请求体:请求时额外携带的数据,如表单提交时的表单数据

  4. Response
    响应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误

    响应头:如内容类型、内容长度、服务器信息、设置Cookie等等。

    响应体:最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

常见HTTP状态码

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

    在这里插入图片描述

熟悉Cookie

  • HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,在数据传输完成后,本次的连接将会关闭,并不会留存相关记录。
  • 服务器无法依据连接来跟踪会话,也无法从连接上知晓用户的历史操作。这严重阻碍了基于Web应用程序的交互,也影响用户的交互体验。
  • 某些网站需要用户登录才进一步操作,用户在输入账号密码登录后,才能浏览页面。对于服务器而言,由于HTTP的无状态性,服务器并不知道用户有没有登录过,当用户退出当前页面访问其他页面时,又需重新再次输入账号及密码
  1. Cookie机制
    为解决HTTP的无状态性带来的负面作用,Cookie机制应运而生。Cookie本质上是一段文本信息。
  • 当客户端请求服务器时,若服务器需要记录用户状态,就在响应用户请求时发送一段Cookie信息。
  • 客户端浏览器会保存该Cookie信息,当用户再次访问该网站时,浏览器会把Cookie做为请求信息的一部分提交给服务器。
  • 服务器对Cookie进行验证,以此来判断用户状态,当且仅当该Cookie合法且未过期时,用户才可直接登录网站。
    在这里插入图片描述
  1. Cookie的存储方式
    Cookie由用户客户端浏览器进行保存,按其存储位置可分为内存式存储和硬盘式存储。
  • 内存式存储将Cookie保存在内存中,在浏览器关闭后就会消失,由于其存储时间较短,因此也被称为非持久Cookie或会话Cookie。
  • 硬盘式存储将Cookie保存在硬盘中,其不会随浏览器的关闭而消失,除非用户手工清理或到了过期时间。由于硬盘式Cookie存储时间是长期的,因此也被称为持久Cookie。
  1. Cookie的实现过程
    客户端与服务器间的Cookie实现过程的具体步骤如下。

    客户端请求服务器:客户端请求网站页面

    服务器响应请求:Cookie是一种字符串,为key=value形式,服务器需要记录这个客户端请求的状态,在响应头中增加一个Set-Cookie字段。

    客户端再次请求服务器:客户端会对服务器响应的Set-Cookie头信息进行存储。当再次请求时,将会在请求头中包含服务器响应的Cookie信息。

可抓取的数据

  • 网页文本:如HTML文档、Json格式文本等。
  • 图片:获取到的是二进制文件,保存为图片格式。
  • 视频:同为二进制文件,保存为视频格式即可。
  • 其他:只要是能请求到的,都能获取。
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值