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

如何让requests.get使用与浏览器一致的同一会话访问目标页面

问题原因

你碰到的爬取数值和浏览器打开不一致的问题,和会话是否匹配没有关系。websudoku.com 每次收到指向根路径的GET请求时,服务端都会动态生成一套全新的随机数独盘面,不管你用浏览器还是requests发起请求,哪怕请求头、cookie完全一致,只要是新的请求打到根路径,返回的都是新盘面,数值自然不可能和之前打开的页面对应上。

解决方法
  • 不要直接请求无参数的根域名:每个生成的数独都有唯一固定的set_id标识,浏览器打开某一个具体数独时,地址栏的URL会带参数,格式为https://www.websudoku.com/?level=难度等级&set_id=数字ID,你只要把这个带完整参数的URL作为requests的请求地址,就能拿到和当前浏览器页面完全一致的数独内容,不需要刻意复刻全量浏览器会话。
  • 基础反爬适配:requests默认的请求头很容易被站点识别拦截,只需要补一个常规浏览器的User-Agent头即可正常请求,示例代码:
import requests
from bs4 import BeautifulSoup

# 替换为浏览器打开目标数独时带set_id的完整URL
url = "https://www.websudoku.com/?level=1&set_id=替换为实际的ID值"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
res = requests.get(url, headers=headers)
res.encoding = res.apparent_encoding
soup = BeautifulSoup(res.text, "html.parser")
# 后续执行数独盘面解析逻辑即可
  • 如果你确实需要完全对齐浏览器会话做其他操作:在浏览器打开目标数独页面后按F12调出开发者工具,在「网络」面板找到对应文档请求,右键选择「复制为cURL」,再把cURL内容转换为requests代码即可,所有cookie、请求头都会自动同步,不需要手动逐个配置。

注意:即使用requests.Session()创建持久化会话,只要你反复请求不带set_id参数的根路径,每次请求都会返回新生成的数独,数值永远无法和之前的页面对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:36:10