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

如何使用Simple Html Dom提取网页内嵌JSON中的所有图片链接

使用Simple HTML Dom提取内嵌JS中的JSON图片链接

嘿,我来帮你搞定这个问题!用Simple HTML Dom爬取网页并提取内嵌JS里的JSON图片链接其实不难,分几步就能轻松实现:

核心思路

我们需要先定位到包含productJsonMedias变量的script标签,然后从标签内容中剥离出纯JSON字符串,解析后就能提取所有图片链接了。

1. 定位目标script标签

首先加载目标网页,然后遍历所有<script>标签,筛选出包含目标变量的那个——毕竟页面里可能有很多无关的script代码。

2. 提取纯JSON字符串

拿到目标script的内容后,我们需要把JS变量定义的部分(var productJsonMedias = 和结尾的;)去掉,只留下数组形式的JSON内容。这里用正则表达式是最高效的方式。

3. 解析JSON并提取链接

用PHP的json_decode把JSON字符串转成关联数组,然后循环遍历每个元素,取出thumb和zoom对应的图片链接即可。


完整代码示例

<?php
// 引入Simple HTML Dom库(确保路径正确)
include('simple_html_dom.php');

// 替换成你要爬取的目标网页URL
$targetUrl = 'https://你的目标网页地址';

// 加载网页内容
$html = file_get_html($targetUrl);

if (!$html) {
    die('抱歉,无法加载目标网页,请检查URL或网络连接');
}

$targetJson = '';

// 遍历所有script标签,筛选出包含productJsonMedias的内容
foreach ($html->find('script') as $script) {
    $scriptText = $script->innertext;
    if (strpos($scriptText, 'productJsonMedias') !== false) {
        // 用正则提取JSON部分,兼容空格、换行的情况
        preg_match('/var\s+productJsonMedias\s+=\s+(.*?);/s', $scriptText, $matches);
        if (isset($matches[1])) {
            $targetJson = $matches[1];
            break;
        }
    }
}

if (empty($targetJson)) {
    die('未找到包含productJsonMedias的JSON数据');
}

// 解析JSON为关联数组
$mediaArray = json_decode($targetJson, true);

// 检查JSON解析是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析失败: ' . json_last_error_msg());
}

// 提取所有图片链接
$allImageLinks = [];
foreach ($mediaArray as $mediaItem) {
    // 收集thumb链接(如果存在)
    if (isset($mediaItem['thumb']) && !empty($mediaItem['thumb'])) {
        $allImageLinks[] = $mediaItem['thumb'];
    }
    // 收集zoom链接(如果存在)
    if (isset($mediaItem['zoom']) && !empty($mediaItem['zoom'])) {
        $allImageLinks[] = $mediaItem['zoom'];
    }
}

// 输出结果(也可以存入数据库或文件)
echo '提取到的图片链接:<br>';
foreach ($allImageLinks as $link) {
    echo $link . '<br>';
}

// 释放资源,避免内存泄漏
$html->clear();
unset($html);
?>

注意事项

  • 路径问题:确保simple_html_dom.php的引入路径正确,如果你把库放在子目录里,要调整include的路径。
  • 正则兼容:如果目标网页的JS代码有换行或大量空格,正则里的\s+和s修饰符(让.匹配换行)能帮你正确匹配内容。
  • 稳定性优化:如果file_get_html经常失败,可以改用cURL来加载网页,能处理更多网络异常情况。
  • 异常处理:代码里加了各种错误判断,避免因为找不到script、JSON解析失败等情况导致程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:49