Python 爬虫的基本原理(一)

      饼干 与 会话(狗头)

Python 爬虫的基本原理涉及以下几个关键步骤:

  1. HTTP 请求:爬虫首先发送一个 HTTP 请求到目标网站。这可以通过 Python 的库如 requests 实现。请求可以是 GET 或 POST 类型,用于获取网页内容或提交表单数据。

  2. 解析 HTML:收到的响应通常是 HTML 格式的文本。爬虫使用解析器(如 BeautifulSoup 或 lxml)来解析这些 HTML 文档,以便提取出有用的信息,例如链接、文本、图片等。

  3. 处理 Cookies:Cookies 是服务器存储在用户浏览器上的小片段数据,常用于跟踪用户会话。爬虫需要能够处理这些 Cookies,以模拟常规用户的行为。在 Python 的 requests 库中,可以使用 Session 对象来自动处理 Cookies。

  4. 处理 Sessions:Session 代表着用户和服务器之间的一次交互会话。爬虫在处理需要登录或保持状态的网站时,需要管理 Sessions。这通常涉及到维护登录状态,发送带有正确身份验证信息的请求。

        整个过程是一个自动化的循环,爬虫不断发送请求,解析响应,提取数据,然后根据提取的数据来决定下一步的行动。这个过程可能还会涉及到处理重定向、错误处理、以及遵守 robots.txt 协议等。

Sessions 和 Cookies 之间的关系:

  1. Cookies:是存储在用户浏览器端的小型文本文件,包含了用于识别用户的信息,如会话标识符(session ID)。服务器在用户首次访问时创建这些信息,并通过 HTTP 响应发送给用户的浏览器。之后,每当浏览器向服务器发送请求时,它都会自动携带这些 Cookies。

  2. Sessions:通常存储在服务器端,用于存储有关用户会话的信息。当用户进行浏览器会话时,服务器会创建一个与该用户相关的 Session,并将其唯一标识符(通常是 session ID)存储在用户的 Cookies 中。

        当用户访问一个网站时,服务器检查用户请求中是否包含 session ID。如果没有,服务器会创建一个新的 Session,并生成一个唯一的 session ID。

        服务器将这个 session ID 发送回用户浏览器,并存储在一个 Cookie 中。

        用户再次发送请求时,浏览器会自动携带这个 Cookie(包含 session ID),服务器通过这个 ID 识别用户,并提取存储在 Session 中的信息。

生命周期:

  • Cookies 的生命周期:可以由服务器在设置 Cookie 时定义。它们可以是会话级的(浏览器关闭时消失)或持久的(具有特定的过期时间)。
  • Sessions 的生命周期:通常取决于服务器的配置。Session 可以在一定时间内保持活动状态,或在用户长时间不活动后过期。
  • Cookies 的变化:用户或服务器都可以修改 Cookies。用户可以删除 Cookies,或者 Cookies 可以在达到其过期日期时自动过期。
  • Sessions 的变化:服务器可以随时修改 Session 中的信息。例如,当用户在网站上执行某些操作时,服务器可能会更新存储在 Session 中的数据。

        总的来说,Cookies 和 Sessions 是协同工作的,Cookies 在客户端存储会话标识符,而 Sessions 则在服务器端存储用户特定的数据。这种机制使得无状态的 HTTP 协议能够维护跨多个请求的状态信息。

在处理 Sessions 和 Cookies 时,还有几个重要的注意事项:

  1. 安全性

    • Cookies 安全性:敏感信息不应直接存储在 Cookies 中,因为它们容易受到跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的影响。使用安全标志(如 HttpOnly 和 Secure)来提高 Cookies 的安全性。
    • Session 安全性:确保 Session ID 难以被预测或截获。使用 HTTPS 可以防止在传输过程中的 Session 劫持。
  2. 隐私和合规性

    • 根据 GDPR 和其他隐私法规,网站需要明确告知用户其 Cookies 和数据收集的用途,并征得用户同意。
  3. 性能考虑

    • 存储大量数据在 Session 中可能会影响服务器性能。根据应用的规模和需求,可能需要使用专门的 Session 存储解决方案,如 Redis 或数据库。
  4. Session 管理

    • 在用户登录、注销或长时间不活动后,合理地管理和销毁 Session。例如,重新生成 Session ID 以避免固定 Session 攻击。
  5. 跨域问题

    • 当应用需要跨多个子域或域名访问 Cookies 时,需要正确设置 Cookies 的域和路径属性。
  6. 兼容性

    • 某些用户可能禁用了 Cookies,这需要在设计 Web 应用时考虑到,确保即使在没有 Cookies 的情况下也能提供基本功能。
  7. Cookies 大小限制

    • 浏览器对于 Cookies 的大小和数量都有限制,通常每个域名下 Cookies 的总大小限制在4KB左右。

Session 的内容和格式:

Session 存储在服务器端,通常是一种键值对的集合,用于保存用户特定的信息。这些信息可以是任何数据类型,例如字符串、数字、列表或字典,具体取决于应用程序的需求。Session 数据通常保存在内存、数据库或其他存储系统中。

例如,在一个购物网站中,Session 可能包含以下类型的信息:

  • 用户ID
  • 用户的购物车内容
  • 用户的偏好设置
  • 认证状态(如用户是否已登录)

Cookies 的内容和格式:

Cookies 存储在客户端(用户的浏览器)中,通常是小型的文本信息,以键值对的形式存在。Cookies 通常用于存储识别用户的信息,如 Session ID,以及其他用户特定的设置,如网站布局偏好或语言设置。

Cookies 的一个典型例子可能是:

  • sessionid=abc123:这是一个键值对,其中 sessionid 是键,abc123 是值,表示用户会话的唯一标识符。
  • preferences=darkmode:true;language:en:这里存储了用户的偏好设置,如暗色模式和语言偏好。

额外信息:

Cookies 在 HTTP 头部中传输,而且它们还包含一些额外的属性,如:

  • ExpiresMax-Age:定义 Cookies 的有效期。
  • DomainPath:定义 Cookies 的作用域。
  • SecureHttpOnly:增加安全性的标志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路由前置守卫router.beforeEach相关用法

router.beforeEach 是 Vue Router 提供的全局前置守卫,用于在路由切换之前执行一些逻辑。该守卫接收三个参数: to: 即将要进入的目标路由对象。from: 当前导航正要离开的路由。next: 一个函数,用于 resolve 钩子。调用 next 表示路由可以继续…

HBase 基础

HBase 基础 HBase1. HBase简介1.1 HBase定义1.2 HBase数据模型1.2.1 HBase逻辑结构1.2.2 HBase物理存储结构1.2.3 数据模型 1.3 HBase基本架构 2. HBase环境安装2.1 HBase 安装部署2.1.1 HBase 本地按照2.1.2 HBase 伪分布模式安装2.1.3 HBase 集群安装 2.2 HBase Shell操作2.2…

jar包部署到linux虚拟机的docker中之后连不上mysql

前言: 跟着黑马学习docker的时候,将java项目部署到了docker中,运行访问报错,反馈连不上mysql。 错误描述: 方法解决: 概述:在虚拟中中,我进入项目容器的内部,尝试ping…

分布式搜索引擎--认识

elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛…

【嵌入式移植】3、编译U-Boot

编译U-Boot 0 U-Boot及本文所选硬件1 获取U-Boot源码2 获取工具链3 BL314 编译4.1 yylloc4.2 u_boot_dtsi 5 烧写6 上电验证 0 U-Boot及本文所选硬件 Das U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。U-B…

达梦数据实时同步工具DMHS常见故障处理

1.启动失败 DMHS在同步故障或是重启时,如果启动失败,则有可能是下面几个原因: 1)EXEC或CPT模块加载失败EXEC和CPT模块由于需要和数据库进行交互,那么它在启动时需要依赖数据库的ODBC和OCI驱动,如果它加载失败则说明它…

seata分布式事务(与dubbo集成)

1.seata是什么? Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional:全局事务注解,添加了以后可实现分布式事务的回滚和提交,用法与spring…

【.NET Core】Lazy<T> 实现延迟加载详解

【.NET Core】Lazy 实现延迟加载详解 文章目录 【.NET Core】Lazy<T> 实现延迟加载详解一、概述二、Lazy<T>是什么三、Lazy基本用法3.1 构造时使用默认的初始化方式3.2 构造时使用指定的委托初始化 四、Lazy.Value使用五、Lazy扩展用法5.1 实现延迟属性5.2 Lazy实现…

翱翔与深耕:鸟型与青蛙型数学家在学科发展中的互补共生与卓越贡献

在弗里曼•戴森的知名演讲《鸟和青蛙》中&#xff0c;他以富有诗意的比喻揭示了数学家们的两种迥异特质与角色定位。戴森将那些具有前瞻视野、能够跨越学科界限&#xff0c;力图构建统一理论框架的数学家形象地比作“鸟”&#xff0c;而将专注于解决具体问题&#xff0c;深入挖…

MySQL 日志之二进制日志-binlog

1、简介 MySQL 的二进制日志记录了对 MySQL 所有的更改操作&#xff0c;不包括 select 和 show 等操作。二进制日志文件主要有&#xff1a;数据恢复、主从复制、审计&#xff08;判断是否有注入攻击&#xff09;等作用。 2、二进制日志参数配置 2.1、文件参数配置 linux 中 My…

安装nvidia driver出现 the cc vision check falied

这里提示说的需要gcc12,但是我只有gcc11,所以就报错了&#xff0c;说一说我自己的解决方法&#xff1a; 安装gcc12和g12,再切换版本为gcc12 安装gcc12: sudo apt install gcc-12安装g12: sudo apt -y install g-12切换版本&#xff1a;参考博客

惯性导航---里程计非完整性约束

惯性导航—里程计非完整性约束 1 非完整性约束原理 在进行管道中心线定位时&#xff0c;惯性导航系统在初始化后通过不断地力学编排更新载体的姿态、速度和位置信息&#xff0c;但是由于传感器是惯性器件&#xff0c;其导航误差会不断累积&#xff0c;这便需要借助外界观测量辅…

Python 分支结构之if语句

在之前编写的Python中我们都是一条一条的编写的语句&#xff0c;没有任何条件或判断&#xff0c;程序会按照代码编写顺序依次执行&#xff0c;这种编写结构叫顺序结构&#xff0c;是编程中最基本的控制结构。除了顺序机构&#xff0c;还有一个比较基本的控制结构&#xff0c;那…

Linux的SSH服务

一.SSH服务简介 1.什么是SSH SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;SSH 为建立在应…

【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(文件处理指令-上)

文件处理指令-上 背景前言专栏介绍面向对象重点内容文件处理命令file格式[options] 主要参数简单说明使用案例 mkdir格式[options] 主要参数应用实例 grep格式主要参数[optionsl 主要参数 应用实例pattern正则表达式主要参数 应用实例fgrep和egrep dd格式[options]主要参数 应用…

linux 网络设置

查看linux基础的网络配置 命令 网关route -nip 地址ifconfig / ip aDNS 服务器cat /etc/resolv.conf主机名hostname路由route -n网络连接状态ss / netstat 一&#xff0c;ifconfig 查看网络接口信息 &#xff08;一&#xff09;ifconfig …

设计模式—— 单例设计模式

单例设计模式 什么是单例模式 单例模式是一种对象创建型模式&#xff0c;使用单例模式&#xff0c;可以保证为一个类只生成唯一的实例对象。也就是说&#xff0c;在整个程序空间中&#xff0c;该类只存在一个实例对象。 为什么使用单例模式 在应用系统开发中&#xff0c;我…

聊聊PowerJob的UseCacheLock

序 本文主要研究一下PowerJob的UseCacheLock UseCacheLock tech/powerjob/server/core/lock/UseCacheLock.java Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface UseCacheLock {String type();String key();int concurrencyLevel(); }Use…

【MIdjourney】镜头效果关键词

1.景深(depth of field) 景深&#xff08;DOF&#xff09;&#xff0c;是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。镜头光圈、镜头距离、及焦平面到拍摄物的距离是影响景深的重要因素。 在MIdjourney中&#xff0c;该关键字会使得…

数字化时代,CDMP/CDGA认证企业个人都需要

&#x1f3af;数字化时代&#xff0c;CDMP(数据管理专业人士)和CDGA(数据治理工程师)认证对于企业和个人来说都是非常重要的。 &#x1f4d2;对于企业而言&#xff1a; ✅为企业赋能 数字化培训是企业在数字化转型中的重要考核标准之一。国资委、工信部、银保监会等都有明确的要…