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

如何使用Python requests.get跳过站点首次返回的加载页响应

可行解决方案

根据你遇到的场景,分两类情况给出可直接落地的解决方法:

场景1:站点仅做请求上下文校验(无JS渲染逻辑)

这种情况是站点首次返回加载页的同时会种下必要的校验Cookie/请求标识,只有同上下文的后续请求才会返回真实内容,使用requests的Session对象复用连接和上下文即可解决:

  • 代码示例:
import requests

# 初始化会话,自动维护Cookie、保持长连接
session = requests.Session()
# 模拟浏览器请求头,可替换为你自己浏览器的对应请求头值
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",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"
})

# 第一次请求获取加载页,同时拿到站点要求的校验Cookie
session.get(target.url)
# 同一会话发起第二次请求,直接获取真实内容
resp = session.get(target.url)

write_to_disk(resp.text)

如果是Cloudflare 5秒盾这类拦截场景,可以直接使用cloudscraper库替换原生requests,自动处理校验逻辑。

场景2:站点内容由前端JS动态渲染

如果第一次请求返回的加载页包含JS逻辑,需要浏览器执行JS、异步拉取接口数据后才会渲染真实内容,requests本身不支持JS执行,需要用无头浏览器模拟真实浏览器行为:
推荐使用Playwright实现,代码示例:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头模式的Chromium浏览器
    browser = p.chromium.launch(headless=True)
    page = browser.new_page(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")
    # 访问目标地址,等待页面网络空闲(所有异步请求加载完成)
    page.goto(target.url, wait_until="networkidle")
    # 也可以指定等待真实内容对应的元素加载完成,按需替换为你要抓取内容的CSS选择器
    # page.wait_for_selector("#real_content", timeout=10000)
    
    # 获取渲染完成的完整页面内容
    full_content = page.content()
    write_to_disk(full_content)
    
    browser.close()

效率优化提示

可以通过浏览器F12控制台的网络面板,过滤XHR/fetch请求,查看真实内容对应的后端接口,直接调用接口拿结构化数据,比抓取页面解析效率高很多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:03