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

PHP抓取HTTP页面无输出求助:DOM解析及内容获取失败

解决PHP抓取HTTP网站内容失败及元素定位问题

问题根源分析

返回Error: Could not retrieve the HTML content.说明file_get_contents无法获取目标页面内容,常见原因包括:

  • 服务器php.ini配置中allow_url_fopen被禁用
  • 目标网站检测到请求无合法User-Agent,拒绝响应
  • 目标网站存在HTTP到HTTPS的自动重定向,file_get_contents默认不处理重定向
  • 目标网站有基础反爬机制拦截请求

解决方案步骤

1. 使用cURL替代file_get_contents获取页面内容

cURL比file_get_contents更灵活,支持自定义请求头、处理重定向,能绕过大部分基础拦截。

2. 屏蔽HTML解析警告

目标页面的HTML可能不规范,DOMDocument解析时会抛出警告,影响后续操作,需提前屏蔽。

3. 优化XPath表达式

原XPath依赖绝对路径,页面结构稍有变化就会失效,且浏览器自动生成的<tbody>标签在原始HTML中可能不存在,需调整路径。

完整可运行代码(WordPress短代码)

function display_html_info2() {
    // 1. 使用cURL获取页面内容
    $url = 'http://adamsonsgroup.com/goldrates/';
    $ch = curl_init($url);
    
    // 设置cURL选项
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随重定向
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); // 模拟浏览器请求头
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 如果重定向到HTTPS,暂时关闭SSL验证(生产环境建议开启)
    
    $html = curl_exec($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
    
    // 检查cURL请求是否成功
    if ($curl_error || !is_string($html)) {
        return 'Error: 无法获取页面内容,错误信息:' . $curl_error;
    }
    
    // 2. 屏蔽DOM解析警告
    libxml_use_internal_errors(true);
    
    // 加载HTML并初始化XPath
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    
    // 清除解析错误
    libxml_clear_errors();
    
    // 3. 优化后的XPath表达式(定位目标H3)
    // 先定位到id为myCarousel的容器,再找内部的table下的第二个tr的第一个td里的h3
    $h3_element = $xpath->query('//*[@id="myCarousel"]//table/tr[2]/td[1]/h3')->item(0);
    
    // 检查是否找到元素
    if (!$h3_element) {
        return 'Error: 未找到目标H3元素';
    }
    
    return trim($h3_element->nodeValue);
}
add_shortcode('shortcode_name2', 'display_html_info2');

额外说明

  • 如果生产环境需要开启SSL验证,可下载根证书并设置CURLOPT_CAINFO指向证书文件,避免安全风险
  • 若目标页面结构后续发生变化,可通过浏览器开发者工具重新获取元素的XPath或CSS选择器,调整查询表达式
  • 频繁抓取可能触发目标网站反爬机制,建议合理设置抓取间隔,遵守网站robots协议

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:21