SEO技术

SEO技术

Products

当前位置:首页 > SEO技术 >

成功用Python requests实现Cookie登录,历经三重挑战。

96SEO 2026-08-13 02:15 0


说到背景,为什么我要跟Cookie死磕?

上个月接了个内部需求。要每天定时从公司用的一个项目管理网站拉取任务数据,生成报表。这个网站没有提供官方API,只能通过网页端操作。手动操作太耗时我就想写个Python脚本自动化。

一开始想得太简单:找到登录接口,POST使用者名密码。拿到Cookie接下来用这个Cookie去访问数据页面。听起来很顺对吧,结果一上手就发现,这个网站的登录流程比我想的复杂得多——有CSRF token登录后还有一次302重定向。而且Cookie的生效方法和域名都有讲究。我前后折腾了三天把requestsSession对象、CookieJar还有HTTP状态码查了个遍,才终于让脚本稳定跑起来。

成功用Python requests实现Cookie登录,历经三重挑战。

如果你也遇到需要处理复杂登录鉴权的网站。特别是那些用传统表单登录、有各种安全校验的,我踩过的这些坑或许能帮你省下不少时间。

至于问题分析,为什么直接发POST请求不行?

我最开始的代码长这样:

import requests
login_url = 'https://example.com/login'
data_url = 'https://example.com/api/data'
payload = {
'username': 'my_user'。'password': 'my_pass'
}
# 尝试1:直接登录
resp = requests.post
print # 输出200,好像成功了?# 尝试用这个resp的cookies去访问数据
cookies = resp.cookies
data_resp = requests.get
print # 输出403!被拒绝了,老实说,

第一个状态码给了我虚假的希望。后来仔细看data_resp.text发现返回的是登录页面的HTML——意思就是根本没登录成功,服务器把我踢回去了。老实说,

排查过程:

  1. 检查登录响应我打印了resp.history发现是一个空列表。说明没有重定向,不对,感觉有问题。
  2. 手动模拟对比我用浏览器开发者工具,仔细对比了我的脚本请求和浏览器正常登录发出的请求。
  3. 发现关键差异
    • 缺失的Token浏览器登录时POST数据里除了账号密码。 还有一个叫csrfmiddlewaretoken的字段,值是一长串字符。这个token是从登录页的HTML表单里提前获取的。
    • Cookie的接收浏览器在GET 登录页面时服务器就已经下发了一个sessionid的Cookie。后续的P​OST 登录请求,会带上这个 Cookie 一起发送。而我的脚本是直接 POST,完全没理会登录页。
    • 重定向处理: 浏览器登录成功后会收到一个 302 状态码,接下来自动跳转到首页。我的脚本没有自动跟随重定向,但即便跟随了因为前面的问题。跳转后的请求也缺乏正确的会话状态。

所以主要问题不是“发送登录请求”,而是模拟一次完整的浏览器会话:

  • #1 痛点:必须先获取页面和初始 Cookie 才能继续。
  • #2 痛点:隐藏字段必须提取并携带。
  • #3 痛点:登陆成功后的跳转必须被捕获,否则会误以为已登陆。

主要实现

. 使用Session对象维持会话状态

This is first and most important lesson I learned: If you need to perform a series of aunticated requests,you must use a​requests.Session.

The Session object automatically manages cookies for you – it saves any cookies returned by server and adds m to subsequent requests。perfectly mimicking a browser.

import requests
# 创建会话,这是所有操作的基础
session = requests.Session
# 可以设置一个通用的请求头,更像浏览器
session.headers.update({
'User-Agent': 'Mozilla/5.0 AppleWebKit/537.36 Chrome/120.0 Safari/537.36'
})

Pain point: 很多站点会检查 User‑Agent,如果仍然使用默认 "python-requests",会直接返回 403 或验证码页。一开始就换成常见浏览器 UA 是必不可少的一步。按理说,

. 获取登录页并解析 CSRF Token

The majority of modern web frameworks embed a random token in login form to defend against CSRF attacks. You must first request login page,extract this token from HTML,and n include it in your POST request.

login_page_url = 'https://example.com/login'
# 第一次 GET 请求。获取页面和初始 Cookie
login_page_response = session.get
print
# 假设 token 在 name='csrfmiddlewaretoken' 的隐藏 input 中
from lxml import html
tree = html.fromstring
csrf_token = tree.xpath
if csrf_token:
csrf_token = csrf_token
print
从else来看,print
# 常见备选字段:
# csrf_token = tree.xpath ...
# csrf_token = tree.xpath

Pain point: Token 名称千差万别,需要先打开开发者工具确认隐藏字段到底叫什么再写对应 XPath/正则抓取代码。

. 构造登录请求并正确处理重定向

A successful login usually returns a 302 redirect to dashboard/homepage. The Session will follow it automatically,but you still need to verify that redirect actually happened.

login_action_url = 'https://example.com/login' # 通常与 GET 同 URL
payload = {
'username': 'your_username_here','password': 'your_password_here','csrfmiddlewaretoken': csrf_token,# 可能还有其他隐藏字段,例如 `next`
}
print
login_response = session.post
print
print
print
  • If .history` contains a 302 and final URL is not login page itself,chances are you’re logged in.
  • If you still land on login page。double‑check token validity or credentials.

. 验证登录状态并访问目标数据

The simplest way to confirm that your session is truly aunticated is to request a page that only logged‑in users can see.

profile_url = 'https://example.com/dashboard'
profile_response = session.get
print
if profile_response.status_code == 200:
if "欢迎回来" in profile_response.text or "Dashboard" in profile_response.text:
print
else这方面,print
else的观点是,print

If this check passes,you can now freely request any protected API endpoint.

target_data_url = 'https://example.com/api/v1/tasks'
data_response = session.get
if data_response.status_code == 200:
data = data_response.json # 假设返回 JSON
print} 条记录。")
else这方面,print
print

完整代码示例

The script below integrates all steps into a reusable class. Replace placeholders with your own URLs、使用者名、密码即可运行。

import time
import requests
from lxml import html
class WebsiteLoginFetcher:
"""处理带 Cookie 登录并抓取受保护数据"""
def __init__:
self.base_url = base_url.rstrip
self.session = requests.Session
self.session.headers.update({
'User-Agent':
'Mozilla/5.0 AppleWebKit/537.36 '
' Chrome/120.0 Safari/537.36'。'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;怎么说呢,q=0.8','Accept-Language': 'zh-CN,zh;q=0.9,en,q=0.8',})
def _get_csrf_token:
"""GET 登录页 → 提取 CSRF Token"""
print
从try来看,resp = self.session.get
resp.raise_for_status
except requests.RequestException as e:
print
return None
tree = html.fromstring
# 常见字段名集合,可自行
candidates =
token_vals =
for name in candidates:
token_vals = tree.xpath
if token_vals:
break
if not token_vals:
token_vals = tree.xpath
if token_vals:
token = token_vals
print
return token
print
return None
def login(self,login_url,username,password,extra_form_data=None):
"""执行完整登陆流程"""
csrf_token = self._get_csrf_token
if not csrf_token:
return False
payload = {
"username": username,"password": password,"csrfmiddlewaretoken": csrf_token,}
if extra_form_data:
payload.update
从try来看,resp = self.session.post(
login_url,data=payload,timeout=10,allow_redirects=True # 默认已开启,可显式写明
)
except requests.RequestException as e:
print
return False
print
print
print
# 简单判定是否真的跳转到了非登陆页
if resp.history and login_url not in resp.url:
print
return True
print
return False
def fetch_protected_data:
"""使用已认证 session 抓取受保护资源"""
try这方面。resp = self.session.get
print
if resp.status_code == 200:
return resp.text # 或 resp.json
再看else,print
return None
except requests.RequestException as e:
print
return None

if name == "main": BASEURL = "https://example.com" LOGINPAGEURL = f"{BASEURL}/login" USERNAME ="yourusernamehere" PASSWORD ="yourpasswordhere" TARGETDATAURL= f"{BASEURL}/api/somedata"

fetcher = WebsiteLoginFetcher
# ---------- 登录 ----------
logged_in : bool =(fetcher.login(LOGIN_PAGE_URL,USERNAME,PASSWORD))
if logged_in :
print
time.sleep # 防止请求过于频繁,被风控
data : str =)
if data :
print # 示例打印前500字符
else :
print
else :
print


标签: 大坑

SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback