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

如何抓取JS动态生成的网页内容?以Wowhead节日区块为例

解决动态渲染内容的抓取问题

针对你遇到的JavaScript动态生成内容、无可用XHR接口的情况,有两种可靠的抓取方案:

1. 无头浏览器渲染完整DOM

利用浏览器引擎执行页面所有JS,生成最终渲染后的HTML再进行查询,适配你的PHP技术栈的示例:

use Spatie\Browsershot\Browsershot;

// 渲染页面并获取完整HTML
$html = Browsershot::url('https://www.wowhead.com/today-in-wow')
    ->waitUntilNetworkIdle() // 等待所有网络请求完成,确保内容加载完毕
    ->bodyHtml();

// 解析HTML并执行XPath查询
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 忽略HTML解析的警告
$dom->loadHTML($html);
libxml_clear_errors();

$xpath = new DOMXPath($dom);
$targetNodes = $xpath->query('//*[contains(@id, "EU-group-holiday-line")]');

// 提取所需内容
foreach ($targetNodes as $node) {
    $eventLink = $node->getElementsByTagName('a')->item(0);
    if ($eventLink) {
        $eventName = $eventLink->nodeValue;
        $eventUrl = $eventLink->getAttribute('href');
        // 处理数据,比如存入变量或输出
    }
}

你也可以用Node.js的Puppeteer/Playwright实现类似逻辑,适配不同技术栈。

2. 提取页面内嵌的数据源

部分网站会把动态内容的数据源以JSON形式内嵌在页面HTML中(比如全局变量window.wowheadData之类的):

  • 打开浏览器开发者工具,在Sources面板搜索EU-group-holiday-line相关关键词,定位生成节点的JS代码,找到数据来源。
  • 直接抓取原始HTML,用正则匹配出目标JSON字符串,解析后就能获取结构化数据,这种方式比无头浏览器更快,无需渲染页面。

重要提醒

爬取第三方网站必须遵守其robots.txt规则与服务条款,避免高频请求触发反爬机制导致IP封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:24