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

为什么使用bs4无法抓取Xero官方版本说明页面的数据?

问题原因分析
  1. 请求头配置无效
    你代码中添加的Access-Control-*系列头属于CORS机制下的服务端响应头,仅用于服务端告知浏览器跨域访问的权限规则,在客户端发起请求时携带这类头没有任何作用,不会改变服务端的返回结果。
  2. 页面为动态渲染类型
    目标页面的版本说明内容并非嵌入在初始静态HTML中,而是页面加载完成后由JavaScript异步请求后台接口获取数据,再动态渲染到DOM结构里的。你用requests直接请求只能拿到空的页面骨架,BeautifulSoup解析这类静态源码自然提取不到有效内容。
解决方案

方案1:使用支持JS渲染的爬取工具(推荐新手使用)

可以用Playwright、Selenium等无头浏览器工具,模拟真实浏览器的运行逻辑,等待页面JS执行完成、内容全部渲染后再提取数据,不需要额外分析接口规则。
示例代码(基于Playwright):

from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

with sync_playwright() as p:
    # 启动无头浏览器
    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/120.0.0.0 Safari/537.36")
    # 访问页面,等待内容加载完成
    page.goto("https://central.xero.com/s/article/Xero-Releases", wait_until="networkidle")
    # 获取渲染完成后的页面源码
    page_content = page.content()
    browser.close()

# 用BeautifulSoup解析渲染后的内容
soup = BeautifulSoup(page_content, "html.parser")
# 此时可以正常提取版本说明相关的内容
print(soup.title)

方案2:直接调用数据接口(效率更高)

打开浏览器开发者工具的「网络」面板,刷新页面后筛选XHR/ Fetch类型的请求,逐次查看响应内容,找到返回版本说明数据的后台接口,直接请求该接口即可拿到结构化的原始数据,不需要加载冗余的页面资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:24:03