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:增加安全性的标志。
相关推荐
懒大王爱吃狼25 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷1 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
待磨的钝刨1 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
深度学习lover3 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
API快乐传递者3 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
励志成为嵌入式工程师4 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端