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

如何借助Session ID/Referrer访问静态URL网站的下一页?

解决分页爬取失败的方案

核心问题分析

你的代码存在几个关键疏漏:没有用同一个Session全程管理会话、未携带页面的CSRF令牌、可能缺少必要的请求头模拟浏览器行为。以下是具体修复步骤:


步骤1:全程使用同一个Session管理会话

Session会自动保存和携带cookies,无需手动传递,确保请求处于同一会话中:

import requests
from bs4 import BeautifulSoup

# 初始化Session,所有请求都用这个session发送
session = requests.Session()
base_domain = "https://arcinsys.hessen.de"
# 替换为你实际的第一页完整URL
first_page_url = f"{base_domain}/arcinsys/你的第一页路径"

# 获取第一页内容,session自动保存cookies
response = session.get(first_page_url)
soup = BeautifulSoup(response.content, 'html.parser')

步骤2:提取CSRF令牌

页面表单中的_csrf字段是网站验证请求合法性的关键,必须携带:

# 从第一页HTML中提取CSRF令牌
csrf_token = soup.find('input', {'name': '_csrf'})['value']

步骤3:构造下一页请求

有两种可行的请求方式,任选其一即可:

方式一:直接调用分页链接

从data-href提取下一页相对路径,拼接完整URL并带上CSRF令牌:

# 获取下一页的相对链接
next_page_rel_path = soup.find('span', id='pId3')['data-href']
next_page_url = f"{base_domain}{next_page_rel_path}&_csrf={csrf_token}"

# 添加Referer头,模拟浏览器跳转行为
headers = {
    'Referer': first_page_url
}

# 请求下一页
next_response = session.get(next_page_url, headers=headers)
# 验证响应状态,200表示成功
print(next_response.status_code)
# 解析下一页内容
next_soup = BeautifulSoup(next_response.content, 'html.parser')

方式二:模拟表单提交

直接提交分页表单,更贴近浏览器原生操作:

# 构造表单参数
form_data = {
    '_csrf': csrf_token,
    'pageposition': '2'  # 目标页码
}
# 表单提交的目标URL
form_action_url = f"{base_domain}/arcinsys/recherchePagingSelect.action"

# 发送表单请求
next_response = session.get(form_action_url, params=form_data, headers=headers)
next_soup = BeautifulSoup(next_response.content, 'html.parser')

关键注意事项

  • 不要混用requests.get()和session.get(),全程用同一个Session对象
  • 必须携带_csrf参数,否则网站会拒绝请求
  • Referer头是模拟浏览器跳转的必要字段,部分网站会验证来源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:01:57