Python 爬虫入门 Day 4 - 模拟登录爬虫与 Session 维持

Python 第二阶段 - 爬虫入门

🎯 今日目标

  • 学习什么是 Cookie / Session,为什么要维持登录状态
  • 掌握 requests.Session 用法
  • 模拟登录一个带登录表单的网站
  • 获取登录后的页面内容

📘 学习内容详解

🔐 什么是 Session?

很多网站内容需要登录后才能访问。登录后,服务器会发给浏览器一个 SessionID(或 Cookie),作为用户身份凭证。

如果你想爬取登录后的页面,就必须"模拟登录"并"保持会话"。

🔁 requests.Session 的作用

使用 requests.Session() 可以:

  • 自动保存 Cookie
  • 在多个请求之间维持登录状态

💻 示例:模拟登录测试网站

我们使用 httpbin.org 模拟登录行为(演示形式):

python 复制代码
import requests

# 创建一个 session 对象
session = requests.Session()

# 构造表单数据(假设是登录表单)
login_data = {
    "username": "testuser",
    "password": "testpass"
}

# 模拟登录请求
login_url = "https://httpbin.org/post"
response = session.post(login_url, data=login_data)

print("登录响应内容:")
print(response.json())  # httpbin 会返回你提交的内容

# 接着访问其他页面(此时自动带上了登录 Cookie)
another_response = session.get("https://httpbin.org/cookies")
print("\n带 Cookie 的请求结果:")
print(another_response.text)

🎯 模拟实际登录网站(仅测试用途)

有些网站登录逻辑如下:

  • 表单地址:https://example.com/login
  • 提交字段:username=xxx&password=xxx&csrf_token=xxx
  • 需要使用 headers 模拟浏览器
  • 可能还需要验证码(此类需用 Selenium)

🧪 今日练习任务

  1. 使用 requests.Session() 模拟一个简单的表单提交(如 httpbin.org 或本地测试站点)

    python 复制代码
    import requests
    
    # 创建 Session 对象(自动保存 cookie)
    session = requests.Session()
    
    # 模拟登录表单数据
    login_data = {
        "username": "testuser",
        "password": "123456"
    }
    
    # 表单提交地址(httpbin.org 用于测试,会返回你提交的所有数据)
    login_url = "https://httpbin.org/post"
    
    # 发送 POST 请求
    response = session.post(login_url, data=login_data)
    
    # 查看服务器返回的 JSON 数据
    print("✅ 登录请求返回内容:")
    print(response.json())
    
    # 模拟登录成功后,再访问一个页面(httpbin 会带上 cookie)
    response2 = session.get("https://httpbin.org/cookies")
    print("\n📦 后续请求中的 Cookie 内容:")
    print(response2.text)

    示例输出:

    python 复制代码
    ✅ 登录请求返回内容:
    {'args': {}, 'data': '', 'files': {}, 'form': {'password': '123456', 'username': 'testuser'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '33', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.31.0', 'X-Amzn-Trace-Id': 'Root=1-684ec172-7f38f51b3f47f06628fc18c7'}, 'json': None, 'origin': '84.17.38.140', 'url': 'https://httpbin.org/post'}
    
    📦 后续请求中的 Cookie 内容:
    {
      "cookies": {}
    }
  2. 观察响应中的 cookie、form、headers 内容

  3. 尝试爬取一个你感兴趣的登录后页面(如 CSDN 博客后台、知乎收藏等------可能需要 cookie 手动导入)

    • 打开浏览器访问 https://www.zhihu.com

    • 手动登录你的知乎账户

    • 打开开发者工具(F12)→ Network → 找任意请求

    • 查看 Request Headers,复制 Cookie 字符串(很长那一串)

    • requests 模拟登录后的请求

      python 复制代码
      import requests
      
      # 将你的 Cookie 字符串复制到这里(注意格式)
      cookie_str = 'd_c0="xxxx"; q_c1="xxxx"; z_c0="2|1:xxxx";'
      
      # 转换为 dict(你也可以用 browser_cookie3 库自动导入)
      cookies = {}
      for item in cookie_str.split(';'):
          key, value = item.strip().split('=', 1)
          cookies[key] = value
      
      # 请求登录后才能访问的页面,例如知乎首页
      url = "https://www.zhihu.com/"
      
      headers = {
          "User-Agent": "Mozilla/5.0",
          "Referer": "https://www.zhihu.com/",
      }
      
      response = requests.get(url, headers=headers, cookies=cookies)
      
      # 打印网页前 500 字符,确认是否登录成功
      print(response.text[:500])

🧠 今日总结

  • 学会了 Session 的基本概念
  • 掌握了 requests.Session() 如何模拟登录并抓取数据
  • 为更复杂的登录机制(验证码、JS登录)做准备
相关推荐
蜡台几秒前
JavaScript async和awiat 使用
开发语言·前端·javascript·async·await
啦啦啦_99991 分钟前
0. Python进阶概要
python
蹦哒1 分钟前
Kotlin DSL 风格编程详解
android·开发语言·kotlin
枫叶丹43 分钟前
【HarmonyOS 6.0】ArkWeb 深度解读:getPageOffset20 与网页滚动偏移量获取能力的演进
开发语言·华为·harmonyos
独特的螺狮粉3 分钟前
开源鸿蒙跨平台Flutter开发:室内探险游戏应用
开发语言·flutter·游戏·华为·开源·harmonyos·鸿蒙
坏小虎4 分钟前
~/.zshrc 和 ~/.bash_profile 详细介绍与区别
开发语言·bash
weixin_408099676 分钟前
OCR 识别率提升实战:模糊 / 倾斜 / 反光图片全套优化方案(附 Python / Java / PHP 代码)
图像处理·人工智能·后端·python·ocr·api·抠图
翻斗包菜8 分钟前
Python 网络编程从入门到精通:TCP/UDP/Socket 实战详解
网络·python·tcp/ip
七颗糖很甜21 分钟前
雨滴谱数据深度解析——从原始变量到科学产品的Python实现【下篇】
python·算法·pandas
独特的螺狮粉22 分钟前
开源鸿蒙跨平台Flutter开发:喝水时间提醒应用
开发语言·flutter·华为·信息可视化·开源·harmonyos·鸿蒙