如何使用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
相关产品推荐
相关产品推荐

