如何用PHP的cURL获取archive.org指定域名的快照数量?
获取Archive.org域名快照数量的PHP方案
可以通过PHP的cURL获取该数值,但直接抓取目标页面的静态HTML不行——因为快照数量是页面加载后通过JavaScript动态拉取数据生成的,file_get_contents和普通cURL请求只能拿到初始静态源码,自然获取不到。
推荐两种可行方案:
方案一:使用Wayback Machine官方API(推荐)
Wayback Machine提供了CDX Server API,可直接查询指定域名的所有快照记录,统计数量即可。这种方式比抓页面更稳定,不受页面结构变化影响。
PHP cURL代码示例
<?php $targetDomain = 'google.com'; // 调用CDX API获取所有快照的时间戳(仅返回时间戳字段以减少数据量) $apiEndpoint = "https://web.archive.org/cdx/search/cdx?url={$targetDomain}&output=json&fl=timestamp"; // 初始化cURL $ch = curl_init($apiEndpoint); // 设置选项:返回结果而非直接输出,跟随重定向,模拟浏览器UA curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'); // 执行请求 $response = curl_exec($ch); curl_close($ch); if ($response) { $snapshotData = json_decode($response, true); if (is_array($snapshotData) && count($snapshotData) > 0) { // 数组第一个元素是表头,所以总数量是数组长度减1 $snapshotCount = count($snapshotData) - 1; echo "该域名快照数量:{$snapshotCount}"; } else { echo "未找到该域名的快照记录"; } } else { echo "API请求失败,请检查网络或域名格式"; } ?>
方案二:抓取动态渲染后的页面(不推荐)
如果一定要通过抓取目标页面获取数值,需要借助能执行JavaScript的无头浏览器工具(如Puppeteer),PHP可通过调用Node.js脚本间接实现。但这种方式依赖额外工具,且页面结构变更会导致解析失效,仅作为备选。
大致步骤
- 安装Node.js和Puppeteer
- 编写Node.js脚本,用Puppeteer打开目标页面,提取快照数量
- 在PHP中通过
exec()或shell_exec()调用该脚本,获取返回结果
内容的提问来源于stack exchange,提问作者daniele
相关产品推荐
相关产品推荐

