如何使用Simple HTML DOM Parser从亚马逊提取产品图片、名称与价格
使用Simple HTML DOM Parser从亚马逊提取产品信息
准备工作
- 下载Simple HTML DOM Parser库,解压后在PHP项目中引入
simple_html_dom.php文件。 - 确保环境支持PHP的
file_get_contents或cURL(推荐用后者,稳定性更强)。
核心代码示例
以下是针对亚马逊产品页提取图片、名称、价格的可运行代码:
<?php // 引入解析器库 require_once('simple_html_dom.php'); // 替换为目标亚马逊产品URL $targetUrl = 'https://www.amazon.com/dp/B08N5WRWNW'; // 模拟浏览器请求头,规避基础反爬 $requestOpts = [ 'http' => [ 'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\r\n" ] ]; $context = stream_context_create($requestOpts); // 获取页面HTML内容 $pageHtml = file_get_contents($targetUrl, false, $context); if (!$pageHtml) { die('页面获取失败,请检查URL或网络状态'); } // 初始化DOM解析器 $dom = str_get_html($pageHtml); // 提取产品名称(对应页面id为productTitle的元素) $nameElement = $dom->find('#productTitle', 0); $productName = $nameElement ? trim($nameElement->plaintext) : '未抓取到产品名称'; // 提取产品价格(兼容亚马逊常见的价格结构) $priceWhole = $dom->find('span.a-price-whole', 0); $priceFraction = $dom->find('span.a-price-fraction', 0); $productPrice = ''; if ($priceWhole && $priceFraction) { $productPrice = trim($priceWhole->plaintext) . '.' . trim($priceFraction->plaintext); } else { // 备用抓取逻辑:取a-offscreen类的价格元素 $altPrice = $dom->find('span.a-offscreen', 0); $productPrice = $altPrice ? trim($altPrice->plaintext) : '未抓取到产品价格'; } // 提取产品主图(优先取高清图,解析data-a-dynamic-image属性) $imageElement = $dom->find('#landingImage', 0); $productImage = ''; if ($imageElement && $imageElement->getAttribute('data-a-dynamic-image')) { $imageData = json_decode($imageElement->getAttribute('data-a-dynamic-image'), true); // 按图片分辨率从高到低排序,取最高清的图 arsort($imageData); $productImage = key($imageData); } else { // 备用逻辑:直接取src属性的图片链接 $productImage = $imageElement ? $imageElement->src : '未抓取到产品图片'; } // 输出结果 echo "产品名称:{$productName}\n"; echo "产品价格:{$productPrice}\n"; echo "产品图片URL:{$productImage}\n"; // 清理DOM资源,避免内存泄漏 $dom->clear(); unset($dom); ?>
重要提示
- 页面结构变动:亚马逊的HTML元素ID、类名经常会调整,若代码失效,需用浏览器开发者工具重新定位目标元素。
- 反爬规避:亚马逊有严格反爬机制,不要短时间内频繁请求,建议添加请求间隔、使用代理IP,且始终保持合法的请求头。
- 合规性:爬取前请确认符合亚马逊
Robots.txt协议及当地法律法规,避免违规。
内容的提问来源于stack exchange,提问作者Bala2125
相关产品推荐
相关产品推荐

