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

如何使用Beautiful Soup绕过网站Cookie协议以爬取https://cage.dla.mil内容

解决Cookie同意页面的爬取问题

你遇到的这类问题很常见——这类网站的Cookie同意机制不是简单手动设置一个agree=True就能绕过的,必须先获取服务器生成的初始会话Cookie(包括那个你发现的唯一值Cookie),再模拟点击同意按钮时的请求,服务器才会认可你已接受协议。

问题根源

你之前的代码直接手动设置了agree Cookie,但忽略了服务器在第一次访问时会分配一个唯一的会话标识Cookie(比如类似ASP.NET_SessionId这类),服务器需要验证这个会话Cookie的有效性,仅设置agree=True无法通过验证,所以还是会返回协议页面。

正确解决步骤

  1. 用Session管理会话:requests.Session()会自动帮你保存所有服务器设置的Cookie,包括那个唯一值的会话Cookie,避免手动管理的麻烦。
  2. 先访问协议页面拿初始Cookie:第一次请求协议页面时,服务器会把必要的Cookie下发给你,Session会自动留存这些Cookie。
  3. 模拟提交同意请求:通过浏览器开发者工具找到点击"I Agree"时网站发送的请求(URL、请求方法、参数),用Session发送这个请求完成协议接受。
  4. 访问目标页面:此时Session已经持有有效的Cookie,再请求目标页面就能拿到实际内容了。

具体代码示例

import requests
from bs4 import BeautifulSoup

# 关键URL(同意请求的URL需要你用浏览器确认,下面是示例)
usage_agree_url = "https://cage.dla.mil/Home/UsageAgree"
accept_cookies_url = "https://cage.dla.mil/Home/AcceptCookies"  # 需替换为实际同意请求URL
target_page_url = "https://cage.dla.mil/"  # 你要爬取的实际页面

# 创建会话,自动管理Cookie
session = requests.Session()

# 设置浏览器UA,避免被反爬识别
session.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
})

# 第一步:访问协议页面,获取服务器下发的初始Cookie
session.get(usage_agree_url)

# 第二步:发送同意Cookie的请求(根据实际请求方法调整,POST/GET)
# 如果是POST且需要表单参数,添加data={'agree': 'True'}这类参数
session.post(accept_cookies_url)

# 第三步:访问目标页面,获取实际内容
response = session.get(target_page_url)

# 解析并输出内容
soup = BeautifulSoup(response.content, "html.parser")
print(soup.prettify())

细节调整提示

  • 确认同意请求的细节:打开浏览器F12开发者工具→Network标签,点击"I Agree"按钮,找到新生成的请求,查看它的请求URL、方法(GET/POST)和表单参数,对应调整代码里的请求方式和参数。
  • 处理CSRF Token(如果有):部分网站会在协议页面的HTML里隐藏一个CSRF Token(比如<input name="__RequestVerificationToken" value="xxx">),需要先用BeautifulSoup提取这个值,再加到同意请求的data参数里一起提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:22:46