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

使用CURL与PHP Simple HTML DOM Parser爬取图片链接部分页面失效问题

问题排查与解决方案

可能的原因

1. 反爬机制拦截请求

Geekbuying对无标识的CURL请求可能存在拦截策略,部分页面会返回空内容或反爬提示页面,导致Simple HTML DOM Parser无法解析到图片标签。你的代码中CURL未设置任何请求头,极易被识别为爬虫。

2. HTML解析异常

部分页面的HTML结构可能存在格式不规范问题,或者Simple HTML DOM Parser对复杂HTML的兼容性不足,导致解析失败。

3. 请求未成功获取内容

网络波动、CURL配置缺失等情况,可能导致$htmlContent为空或不完整,后续自然无法找到图片节点。

修复步骤

步骤1:完善CURL请求头,模拟浏览器访问

给CURL添加必要的请求头,避免被反爬拦截:

include "simple_html_dom.php";
$link = "https://www.geekbuying.com/item/eufy-Clean-G40-Hybrid--Robot-Vacuum-Cleaner-520591.html";

function get_content($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // 添加浏览器请求头
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        '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: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
        'Accept-Language: en-US,en;q=0.5',
        'Connection: keep-alive',
        'Upgrade-Insecure-Requests: 1'
    ));
    // 禁用SSL验证(适配部分网站证书问题)
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    
    $htmlContent = curl_exec($ch);
    
    // 检查CURL请求是否出错
    if(curl_errno($ch)){
        echo 'CURL错误:' . curl_error($ch);
        curl_close($ch);
        return;
    }
    curl_close($ch);
    
    // 检查获取的内容是否为空
    if(empty($htmlContent)){
        echo '未获取到页面内容';
        return;
    }
    
    $dom = new simple_html_dom();
    $dom->load($htmlContent);
    
    // 检查DOM是否加载成功
    if(!$dom){
        echo 'DOM解析失败';
        return;
    }
    
    foreach($dom->find('img') as $element){
        $immagine = $element->src;
        echo "$immagine <br />";
    }
    
    // 清理DOM资源,避免内存泄漏
    $dom->clear();
    unset($dom);
}

get_content($link);

步骤2:验证请求内容

在获取$htmlContent后,可以先输出部分内容(比如echo substr($htmlContent, 0, 500);),确认是否获取到了正常的商品页面HTML,而非反爬提示或空内容。

步骤3:替换解析库(可选)

如果Simple HTML DOM Parser仍存在兼容性问题,可尝试使用PHP原生的DOMDocument解析:

function get_content($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        '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: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
    ));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $htmlContent = curl_exec($ch);
    if(curl_errno($ch)){
        echo 'CURL错误:' . curl_error($ch);
        curl_close($ch);
        return;
    }
    curl_close($ch);
    
    $dom = new DOMDocument();
    // 禁用错误提示,兼容不规范的HTML
    libxml_use_internal_errors(true);
    $dom->loadHTML($htmlContent);
    libxml_clear_errors();
    
    $images = $dom->getElementsByTagName('img');
    foreach($images as $img){
        $src = $img->getAttribute('src');
        echo "$src <br />";
    }
}

关键说明

  • 反爬机制是最可能的问题根源,添加请求头后绝大多数情况能解决问题。
  • 务必检查CURL请求错误和返回内容的有效性,避免对无意义内容进行解析。
  • 使用Simple HTML DOM Parser后记得调用clear()释放资源,防止内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:23:09