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

PHP Simple HTML DOM Parser无返回结果问题求助

解决PHP Simple HTML DOM Parser无法获取亚马逊商品价格的问题

核心问题分析

  1. 亚马逊反爬拦截:直接用file_get_html请求时,未携带浏览器标识(User-Agent)等必要请求头,亚马逊会判定为爬虫,返回验证码页面或空内容,导致$html无法正确获取商品页DOM。
  2. 协议跳转问题:你使用http协议请求,亚马逊会强制跳转到https,但file_get_html默认无法正确处理跳转,导致获取的内容异常。
  3. 元素处理错误:即使成功获取到.a-price-whole元素,直接echo $price输出的是对象实例而非文本内容,需要提取innertext属性。

修复后的代码示例

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/assets/html_dom_parser/simple_html_dom.php');

$amazonASIN = "B0C89F1V5S";
$url = "https://www.amazon.co.uk/dp/" . $amazonASIN;

// 用CURL模拟浏览器请求,携带必要请求头
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随跳转
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept-Language: en-GB,en;q=0.9'
]);
$htmlContent = curl_exec($ch);
curl_close($ch);

// 加载HTML到Simple HTML DOM
$html = str_get_html($htmlContent);

if($html) {
    $priceElement = $html->find('.a-price-whole', 0);
    if($priceElement) {
        $price = trim($priceElement->innertext);
        echo 'price is ' . $price;
    } else {
        echo '未找到价格元素';
    }
} else {
    echo '无法获取页面内容';
}
?>

额外说明

  • 请求头的重要性:User-Agent必须设置成主流浏览器的标识,否则极易被亚马逊拦截。若仍被拦截,可尝试添加更多请求头(如Accept、Referer等)。
  • 反爬机制限制:即使设置了请求头,亚马逊仍可能通过Cookie、验证码等方式拦截爬虫。长期需求建议使用亚马逊官方API,避免触发反爬。
  • 元素选择器验证:亚马逊页面结构可能随时变更,需通过浏览器开发者工具确认.a-price-whole是否仍是价格元素的正确选择器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:33:18