iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python3网络爬虫实战-18、Ses
  • 415
分享到

Python3网络爬虫实战-18、Ses

爬虫实战网络 2023-01-31 07:01:22 415人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

在浏览网站的过程中我们经常会遇到需要登录的情况,有些页面只有登录之后我们才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就会需要重新登录。还有一些网站有时在我们打开浏览器的时候就自动登录了,而且很长的时间都不会失效,这种

在浏览网站的过程中我们经常会遇到需要登录的情况,有些页面只有登录之后我们才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就会需要重新登录。还有一些网站有时在我们打开浏览器的时候就自动登录了,而且很长的时间都不会失效,这种情况又是为什么?其实这里面涉及到 Session 和 Cookies 的相关知识,本节我们就来揭开它们的神秘面纱。

在开始之前我们需要先了解一下静态网页和动态网页的概念。
还是前文中的示例代码,内容如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>This is a Demo</title>
    </head>
    <body>
        <div id="container">
            <div class="wrapper">
                <h2 class="title">Hello World</h2>
                <p class="text">Hello, this is a paragraph.</p>
            </div>
        </div>
    </body>
</html>
python资源分享qun 784758214 ,内有安装包,pdf学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

这是最基本的 HTML 代码,我们将其保存为一个 html 文件,然后把它放在某台具有固定公网 IP 的主机上,主机上装上 Apache 或 Nginx服务器,这样这台主机就可以作为服务器了,其他人便可以通过访问服务器看到这个页面了,这就搭建了一个最简单的网站。
这种网页的内容是 HTML 代码编写的,文字、图片等内容均是通过写好的 HTML 代码来指定的,这种页面叫做静态网页。
这种网页加载速度快,编写简单,但是存在很大的缺陷,如可维护性差,不能根据 URL 灵活多变地显示内容等,例如我们想要给这个网页的 URL 传入一个 name 参数,让其在网页中显示出来,是无法做到的。
所以动态网页应运而生,它可以动态解析 URL 中参数的变化,关联数据库并动态地呈现不同的页面内容,非常灵活多变,我们现在遇到的大多数网站都是动态网站,它们不再是一个简单的 HTML,而是可能由 jsP、PHP、Python 等语言编写的,功能相比静态网页强大和丰富太多太多。
动态网站还可以实现用户登录注册的功能,再回到开篇提到的问题,很多页面是需要登录之后才可以查看的,按照一般的逻辑来说,我们输入用户名密码登录之后,肯定是拿到了一种类似凭证的东西,有了它我们才能保持登录状态,才能访问登录之后才能看到的页面。
那么这种神秘的凭证到底是什么呢?其实它就是 Session 和 Cookies 共同产生的结果,下面我们来一探它们的究竟。

在了解 Session 和 Cookies 之前,我们还需要了解 Http 的一个特点,叫做无状态。
HTTP 的无状态是指 HTTP 协议对事务处理是没有记忆能力的,也就是说服务器不知道客户端是什么状态。当我们向服务器发送一个 Requset 后,服务器解析此 Request,然后返回对应的 Response,服务器负责完成这个过程,而且这个过程是完全独立的,服务器不会记录前后状态的变化,也就是缺少状态记录,这意味着如果后续需要处理需要前面的信息,则它必须要重传,这也导致了需要额外传递一些前面的重复 Request 才能获取后续 Response,然而这种效果显然不是我们想要的。为了保持前后状态,我们肯定不能将前面的请求全部重传一次,这太浪费资源了,对于这种需要用户登录的页面来说,更是棘手。
所以,这时候,两个用于保持 HTTP 连接状态的技术就出现了,它们分别是 Session 和 Cookies,Session 在服务端,也就是网站的服务器,用来保存用户的会话信息,Cookies 在客户端,也可以理解为浏览器端,有了 Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别 Cookies 并鉴定出是哪个用户,然后再判断用户是否是登录状态,然后返回对应的 Response。
所以我们可以理解为 Cookies 里面保存了登录的凭证,有了它我们只需要在下次请求携带 Cookies 发送 Request 而不必重新输入用户名、密码等信息重新登录了。
因此在爬虫中,有时候处理需要登录才能访问的页面时,我们一般会直接将登录成功后获取的 Cookies 放在 Request Headers 里面直接请求,而不必重新模拟登录。
好,大体了解什么是 Session 和 Cookies 之后,我们来详细剖析一下它们的原理。

Session,即会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 Session。
而在 WEB 中 Session 对象用来存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 Session 跟踪而储存在用户本地终端上的数据。

会话维持

那么利用 Cookies 我们是怎样来保持状态的呢?当客户端第一次请求服务器时,服务器会返回一个 Headers 中带有 Set-Cookie 字段的 Response 给客户端,用来标记是哪一个用户,客户端浏览器会把Cookies 保存起来。当浏览器下一次再请求该网站时,浏览器会把此Cookies 放到 Request Headers 一起提交给服务器,Cookies 携带了 Session ID 信息,服务器检查该 Cookies 即可找到对应的 Session 是什么,然后再判断 Session 来以此来辨认用户状态。
所以我们在登录某个网站的时候,登录成功后服务器会告诉客户端设置哪些 Cookies 信息,在后续访问页面时客户端会把 Cookies 发送给服务器,服务器再找到对应的 Session 加以判断,如果 Session 中的某些设置登录状态的变量是有效的,那就证明用户是处于登录状态的,即可返回登录之后才可以查看的网页内容,浏览器进行解析便可以看到了。
反之,如果传给服务器的 Cookies 是无效的,或者 Session 已经过期了,我们将不能继续访问页面,可能会收到错误的 Response 或者跳转到登录页面重新登录。
所以 Cookies 和 Session 需要配合,一个处于客户端,一个处于服务端,二者共同协作,就实现了登录会话控制。

属性结构

接下来我们来看看 Cookies 都有哪些内容,在这里以知乎为例,在浏览器开发工具中打开 Application 选项卡,然后在左侧会有一个 Storage 部分,最后一项即为 Cookies,将其点开,可以看到类似如下内容,这些就是 Cookies,如图 2-14 所示:

Python3网络爬虫实战-18、Session和Cookies

图 2-14 Cookies 列表
我们可以看到 Cookies 有一个个条目,每个条目我们可以称之为 Cookie,取单数形式。它有这么几个属性:

  • Name,即该 Cookie 的名称。Cookie 一旦创建,名称便不可更改
  • Value,即该 Cookie 的值。如果值为 Unicode 字符,需要为字符编码。如果值为二进制数据,则需要使用 BASE64 编码
  • 。Max Age,即该 Cookie 失效的时间,单位秒,也常和 Expires 一起使用,通过它可以计算出其有效时间。Max Age 如果为正数,则该Cookie 在 Max Age 秒之后失效。如果为负数,则关闭浏览器时Cookie 即失效,浏览器也不会以任何形式保存该 Cookie。Path,即该 Cookie 的使用路径。如果设置为 /path/,则只有路径为 /path/ 的页面可以访问该 Cookie。如果设置为 /,则本域名下的所有页面都可以访问该 Cookie。
  • Domain,即可以访问该 Cookie 的域名。例如如果设置为 .zhihu.com,则所有以 zhihu.com,结尾的域名都可以访问该Cookie。
  • Size字段,即此 Cookie 的大小。
  • Http字段,即 Cookie 的 httponly 属性。若此属性为 true,则只有在 HTTP Headers 中会带有此 Cookie 的信息,而不能通过 document.cookie 来访问此 Cookie。
  • Secure,即该 Cookie 是否仅被使用安全协议传输。安全协议。安全协议有 https,SSL 等,在网络上传输数据之前先将数据加密。默认为 false。以上便是 Cookies 的基本结构。

会话Cookie、持久Cookie

表面意思来说,会话 Cookie 就是把 Cookie 放在浏览器内存里,浏览器在关闭之后该 Cookie 即失效,持久 Cookie 则会保存到客户端的硬盘中,下次还可以继续使用,用于长久保持用户登录状态。

其实严格来说没有会话 Cookie 和持久 Cookie 之分,它只是由 Cookie 的 Max Age 或 Expires 字段决定了过期的时间,通过它浏览器可以计算出其有效时间。Max Age 如果为正数,则该 Cookie 在 Max Age 秒之后失效,如果 Max Age 特别大,那就会保存非常长的时间。如果为负数,则关闭浏览器时 Cookie 即失效,浏览器也不会以任何形式保存该 Cookie。

所以一些持久化登录的网站其实就是把 Cookie 的有效时间和 Session 有效期设置得比较长,下次我们再访问页面时仍然携带之前的 Cookies 就可以直接保持登录状态。Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

在谈论 Session 机制的时候,常常听到这样一种误解“只要关闭浏览器,Session 就消失了”,这种理解是错误的,可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对 Session 来说也是一样的,除非程序通知服务器删除一个 Session,否则服务器会一直保留,比如程序一般都是在我们做注销操作的时候才去删除 Session。

但是当我们关闭浏览器时,浏览器不会主动在关闭之前通知服务器它将要关闭,所以服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分 Session 机制都使用会话 Cookie 来保存 Session ID 信息,而关闭浏览器后 Cookies 就消失了,再次连接服务器时也就无法找到原来的 Session。如果服务器设置的 Cookies 被保存到硬盘上,或者使用某种手段改写浏览器发出的 HTTP 请求头,把原来的 Cookies 发送给服务器,则再次打开浏览器仍然能够找到原来的 Session ID,依旧还是可以保持登录状态的。

而且恰恰是由于关闭浏览器不会导致 Session 被删除,这就需要服务器为 Seesion 设置一个失效时间,当距离客户端上一次使用 Session 的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把 Session 删除以节省存储空间。

--结束END--

本文标题: Python3网络爬虫实战-18、Ses

本文链接: https://www.lsjlt.com/news/192368.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python3网络爬虫实战-18、Ses
    在浏览网站的过程中我们经常会遇到需要登录的情况,有些页面只有登录之后我们才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就会需要重新登录。还有一些网站有时在我们打开浏览器的时候就自动登录了,而且很长的时间都不会失效,这种...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-10、爬虫框
    我们直接用 Requests、Selenium 等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-11、爬虫框
    ScrapySplash 是一个 Scrapy 中支持 JavaScript 渲染的工具,本节来介绍一下它的安装方式。ScrapySplash 的安装分为两部分,一个是是 Splash 服务的安装,安装方式是通过 Docker,安装之后会...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-15、爬虫基
    在写爬虫之前,还是需要了解一些爬虫的基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 基本原理等。 那么本章内容就对一些在做爬虫之前所需要的基础知识做一些简单的总结。 在本节我们会详细了解 HTTP 的基本原理...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-17、爬虫基
    爬虫,即网络爬虫,我们可以把互联网就比作一张大网,而爬虫便是在网上爬行的蜘蛛,我们可以把网的节点比做一个个网页,爬虫爬到这就相当于访问了该页面获取了其信息,节点间的连线可以比做网页与网页之间的链接关系,这样蜘蛛通过一个节点后可以顺着节点连线...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-9、APP爬
    Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它我们可以驱动 Android、iOS 等设备完成自动化测试,比如模拟点击、滑动、输入等操作,其官方网站为:http://appium.io/,本节来了解一下 ...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-7、APP爬
    MitmProxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。同时 MitmProxy 还有两个关联组件,一个是 MitmDump,它是 MitmProx...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-8、APP爬
    MitmProxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。同时 MitmProxy 还有两个关联组件,一个是 MitmDump,它是 MitmProx...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-6、APP爬
    除了 Web 网页,爬虫也可以对 APP 的数据进行抓取,APP 中的页面要加载出来,首先需要获取数据,那么这些数据一般是通过请求服务器的接口来获取的,由于 APP 端没有像浏览器一样的开发者工具直接比较直观地看到后台的请求,所以对 APP...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-30、PyQ
    在上一节我们介绍了 BeautifulSoup 的使用,它是一个非常强大的网页解析库,可有没有觉得它的一些方法使用有点不适应?有没有觉得它的 CSS 选择器功能没有那么强大? 如果你对 Web 有所涉及,如果你比较喜欢用 CSS 选择器,如...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-25、req
    在前面一节我们了解了 Requests 的基本用法,如基本的 GET、POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。 我们知道 Re...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-16、Web
    我们平时用浏览器访问网站的时候,一个个站点形形×××,页面也各不相同,但有没有想过它是为何才能呈现出这个样子的?那么本节我们就来了解一下网页的基本组成、结构、节点等内容。 网页可以分为三大部分,HTML、CSS、JavaScript,我们...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-24、req
    在前面一节我们了解了 Urllib 的基本用法,但是其中确实有不方便的地方。比如处理网页验证、处理 Cookies 等等,需要写 Opener、Handler 来进行处理。为了更加方便地实现这些操作,在这里就有了更为强大的库 Request...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-27、Req
    本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HTML 的解析库不是很了解,所以本节我们选...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-5、Web库
    Web 想必我们都不陌生,我们现在日常访问的网站都是 Web 服务程序搭建而成的,Python 同样不例外也有一些这样的 Web 服务程序,比如 Flask、Django 等,我们可以拿它来开发网站,开发接口等等。 在本书中,我们主要要用到...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-23、使用U
    利用 Urllib 的 robotparser 模块我们可以实现网站 Robots 协议的分析,本节我们来简单了解一下它的用法。 Robots 协议也被称作爬虫协议、机器人协议,它的全名叫做网络爬虫排除标准(Robots Exclusio...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-13、部署相
    在将 Scrapy 代码部署到远程 Scrapyd 的时候,其第一步就是要将代码打包为 Egg 文件,其次需要将 Egg 文件上传到远程主机,这个过程如果我们用程序来实现是完全可以的,但是我们并不需要做这些工作,因为 ScrapydCli...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-19、代理基
    我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如 403 Forbidden,这时候打开网页一看,可能会看到“您的 IP 访问频率太高”这样的提示。出...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-28、解析库
    上一节我们实现了一个最基本的爬虫,但提取页面信息时我们使用的是正则表达式,用过之后我们会发现构造一个正则表达式还是比较的繁琐的,而且万一有一点地方写错了就可能会导致匹配失败,所以使用正则来提取页面信息多多少少还是有些不方便的。 对于网页的节...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-21、使用U
    在前面一节我们了解了 Request 的发送过程,但是在网络情况不好的情况下,出现了异常怎么办呢?这时如果我们不处理这些异常,程序很可能报错而终止运行,所以异常处理还是十分有必要的。 Urllib 的 error 模块定义了由 reques...
    99+
    2023-01-31
    爬虫 实战 网络
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作