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

Python使用requests请求网页时article元素内容为空如何解决?

你拿到空的<article id="dashboard"></article>节点,是因为该站点的仪表盘数据完全由前端JavaScript动态加载渲染,requests库仅能获取初始静态HTML源码,不会执行页面内置的JS逻辑,自然拿不到后续填充的动态数据。

解决方案

以下两种方案可以根据你的场景选择:

方案1:直接抓取后端数据接口(推荐,速度最快、稳定性最高)

该方案不需要解析页面,直接拿到结构化JSON数据,资源消耗最低,适合长期稳定采集。

  • 操作步骤:
    1. 打开浏览器F12开发者工具,切换到「网络」面板,刷新页面后筛选「XHR/ Fetch」类型的请求,找到返回仪表盘数据的接口(响应内容一般为JSON格式)。
    2. 复制该接口的请求URL、完整请求头(重点是User-Agent、站点自定义鉴权头、Cookie等校验字段)、请求参数(POST请求需要额外复制请求体参数)。
    3. 用requests模拟该请求即可直接拿到目标数据。
  • 注意事项:
    • 定期检查接口参数是否有变更,部分站点会给接口加签名、时效token等校验,可逆向JS逻辑还原参数生成规则适配。
    • 控制请求频率,可加合理的间隔时间、轮换User-Agent避免触发反爬限制。
  • 示例代码结构:
import requests

headers = {
    "User-Agent": "从浏览器请求中复制的真实User-Agent",
    # 其他从浏览器中复制的必要请求头都可以加在此处
}
# POST请求换成requests.post方法,参数放到data或json字段即可
resp = requests.get("你抓到的真实数据接口地址", headers=headers)
dashboard_data = resp.json()
# 直接处理dashboard_data的结构化字段即可

方案2:使用无头浏览器渲染页面(开发成本低,适合接口逆向难度高的场景)

如果站点接口加密逻辑复杂,逆向成本过高,可以用支持JS渲染的工具加载完整页面后再提取数据。

  • 以playwright为例的示例代码:
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头模式浏览器,无可视化窗口
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://bitcoin.clarkmoody.com/dashboard/", timeout=60000)
    # 等待dashboard节点加载完成,最长等待10秒
    page.wait_for_selector("#dashboard", timeout=10000)
    # 提取dashboard的完整HTML内容,也可以直接提取内部子节点的文本/属性
    dashboard_content = page.locator("#dashboard").inner_html()
    browser.close()

# 后续用BeautifulSoup等工具解析dashboard_content即可
  • 注意事项:
    • 首次使用需要安装依赖:执行pip install playwright后再执行playwright install chromium
    • 可配置代理、自定义User-Agent绕过基础反爬,性能比直接抓接口低,适合小批量采集场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:36:04