You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python爬取需要登录权限的网站数据

Python 需登录站点数据爬取实现方案

针对你当前基于requests + BeautifulSoup的基础代码,提供两种常用的登录态适配方案:

方案1:Session会话维持登录(推荐,适配绝大多数表单登录场景

这个方案通过requests.Session()自动管理Cookie,模拟浏览器的会话逻辑,无需手动处理Cookie参数,适配大多数常规账号密码登录的站点。
实现步骤:

  • 打开浏览器F12开发者工具的「网络」面板,手动触发一次登录操作,抓取登录请求的提交地址、请求参数(一般包含用户名、密码字段,部分站点会带csrf_token、验证码等附加参数)
  • 优先请求登录页面提取附加参数(比如csrf_token),再提交登录请求,登录成功后直接用同一个Session请求目标数据页面即可
    修改后的示例代码如下:
import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.3"
}
# 初始化会话对象,自动维护Cookie
session = requests.Session()
session.headers.update(headers)

# 第一步:提交登录请求(替换为你抓包得到的真实登录接口地址、参数
login_url = "http://ema.todrock.com/login"
login_data = {
    "username": "你的账号",
    "password": "你的密码",
    # 有其他校验参数比如csrf_token可直接加在这里
}
login_resp = session.post(login_url, data=login_data)
# 可通过状态码、返回体关键字判断是否登录成功,确认成功后再执行后续请求

# 第二步:登录成功后用同一个session请求目标页面
r = session.get("http://ema.todrock.com/list-details/5")
soup = BeautifulSoup(r.content, "html.parser")
table = soup.find_all("div",class_="table-responsive")
for r in table:
    print(r)

如果站点登录页有csrf校验,需要先请求登录页提取csrf参数再提交,示例提取逻辑:

# 先请求登录页面提取csrf参数
login_page_resp = session.get("登录页面地址")
soup_login = BeautifulSoup(login_page_resp.content, "html.parser")
csrf_token = soup_login.find("input", attrs={"name": "csrf_token"})["value"]
# 再把csrf_token加入login_data后再提交登录请求

方案2:手动携带Cookie请求(适合临时小规模爬取)

如果不需要频繁切换账号、或者登录逻辑复杂不想逆向,可直接用浏览器登录后复制的Cookie发起请求:

  • 浏览器登录目标站点后,在F12网络面板随便找一个站点的请求,复制请求头中的Cookie值,加到headers里即可,示例代码:
import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.3",
    "Cookie": "你从浏览器复制的Cookie字符串" # 替换为实际Cookie值
}
r = requests.get("http://ema.todrock.com/list-details/5", headers=headers)
soup = BeautifulSoup(r.content, "html.parser")
table = soup.find_all("div",class_="table-responsive")
for r in table:
    print(r)

注意:Cookie存在有效期,过期后需要重新登录复制新的Cookie

补充说明

若站点登录有验证码、密码加密、滑块验证等反爬机制,需要对应处理验证码识别、加密参数逆向逻辑即可,上述会话维持逻辑不变。

内容的提问来源于stack exchange,提问作者Arslan Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:57:00