requests 库进阶:处理 Cookie、Session 与简单登录爬取
发布时间:2026/8/29 5:40:40 作者:尧图编辑部 阅读量:1,286

网络爬虫里头, 好些场景得处理带状态的请求, 像登录之后才可访问的页面啦, 还有需要持续的操作之类。库不但能够达成基于HTTP , 也就是其对于 以及 有着极具灵活性的支持, 这才恰巧是应对这类场景的关键核心所在。本文会引领你深度去把握、 与 的内部原理、具体应用方法, 还有怎样借由它们来实现简易的登录爬取操作。一、 核心原理与手动处理它是那种被存储于客户端的、属于服务器的小型文本数据, 其用途在于记录用户状态范畴内的情况, 诸如登录凭证、浏览记录等此类。每当客户端发起请求这个行为发生的时候, 就会自动去携带与对应域名相关、能让服务器识别身份的某种东西。1. 手动设置 发起请求借助.get ()或者post ()的参数, 能够直接传入字典, 以此模拟已经登录的状态。运行import requests # Cookie 字典从浏览器开发者工具获取 cookies { user_id: 123456, token: abcdef123456 } # 携带 Cookie 访问需要登录的页面 response requests.get(https://example.com/user/profile, cookiescookies) print(response.text)2. 提取响应中的服务器返回的 可通过 . 提取便于后续请求复用。运行# 发送首次请求获取服务器设置的 Cookie response requests.get(https://example.com/login) # 提取 Cookie 并转换为字典 cookie_dict requests.utils.dict_from_cookiejar(response.cookies) print(服务器返回的 Cookie, cookie_dict)二、 自动管理更高效的状态维持以手动方式来进行处理, 需要频繁地去传递字典之类的东西, 并且在处理诸如过期时间、临时令牌这些随着时间动态发生变化的情况时, 是存在困难的。而有的方式会创建起一个会话对象, 能够自动地保障状态处于一种适宜的情形之中, 从而模拟出浏览器所具备的那种“持续具备会话状态”的表现。1. 基本用法对象的使用方式与 模块一致但所有请求会共享 。运行import requests # 创建会话对象 session requests.Session() # 首次请求如登录页面Session 自动保存 Cookie session.get(https://example.com/login) # 后续请求自动携带 Cookie无需手动传入 profile_response session.get(https://example.com/user/profile) print(profile_response.text)2. 的核心优势运行# 设置全局请求头所有会话请求都会携带 session.headers.update({ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0, Referer: https://example.com })三、实战简单登录爬取流程多数网站登录时, 要提交表单数据, 也就是用户名跟密码, 将其结合起来, 能够达成“登录, 然后爬取需授权内容”这样一个完整流程。1. 登录接口核心步骤分析登录过程, 实现登录爬取: 打开浏览器开发者工具F12, 从中寻觅登录表单所交至的目标 URL 以及参数。着手构造登录数据, 将用户名、密码等表单参数予以整理要留意参数名必须与接口保持一致。运用某种方式提交具备登录属性的请求, 自动留存登录成功之后的相关记载。借助相同行径访问授权页面, 此步骤用以抵达需要登录方可浏览的内容。给出爬取需登录网站内容的示例。拿某模拟登录网站当作例子, 确切的实际场景当中, 需要将其替换成目标网站的货真价实的接口以及参数呀。运行import requests # 1. 创建会话 session requests.Session() session.headers.update({User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0}) # 2. 构造登录参数从开发者工具 Form Data 中获取参数名 login_data { username: your_account, password: your_password, submit: 登录 # 表单提交按钮的参数名需与接口一致 } # 3. 提交登录请求POST 方法目标 URL 为登录接口 login_url https://example.com/api/login session.post(login_url, datalogin_data) # 4. 访问需授权的页面自动携带登录 Cookie target_url https://example.com/user/order response session.get(target_url) # 验证爬取结果 if 我的订单 in response.text: print(登录爬取成功) print(爬取内容, response.text[:500]) # 打印前 500 字符 else: print(登录失败请检查参数或接口地址)四、注意事项牵涉避坑指南动态参数处理, 部分网站登录存有验证码、CSRF Token等动态参数, 要先访问登录页面提取Token而后提交, 请求方法跟数据格式, 需确认登录接口是POST还是GET, 数据格式是form-data用data参数或者JSON用json参数, 反爬机制规避, 要设置恰当的请求头User-Agent、, 防止频繁请求, 必要之际添加延时。存在有效期, 要是在爬取进程当中出现了“登录失效”这种情况, 那么有可能是过期了, 此时候必须重新去发起登录请求。