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

PHP爬虫报错求助:file_get_contents 403及find()调用空对象问题

问题解决方案

1. 解决403 Forbidden错误

服务器返回403是因为检测到请求来自脚本而非浏览器,需要模拟浏览器请求头。建议用curl替代load_file获取页面内容,设置User-Agent等请求头绕过基础反爬。

2. 修复致命错误

当load_file失败时,页面内容无法正常加载,$html调用find()会触发空指针错误。必须先确保成功获取页面内容再进行解析。

3. 修正选择器与语法错误

  • price-inner-text是类选择器,需添加前缀.,即.price-inner-text
  • 原代码中foreach末尾的分号会导致循环体为空,无法实际获取内容;单个元素直接通过索引find(selector, 0)获取更高效

修正后的完整代码

include_once("simple_html_dom.php");

$url = 'https://eg.iherb.com/pr/california-gold-nutrition-sport-whey-protein-isolate-1-lb-16-oz-454-g/71031';

// 使用curl模拟浏览器请求获取页面内容
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 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_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 本地测试临时关闭,生产环境建议开启
$pageContent = curl_exec($ch);
curl_close($ch);

if (!$pageContent) {
    die("无法获取页面内容");
}

// 加载内容到HTML解析器
$html = new simple_html_dom();
$html->load($pageContent);

// 获取并输出商品名称
$productName = $html->find("h1#name", 0);
echo $productName ? "商品名称:" . $productName->plaintext . "<br>" : "未找到商品名称<br>";

// 获取并输出商品价格
$price = $html->find(".price-inner-text", 0);
echo $price ? "商品价格:" . $price->plaintext . "<br>" : "未找到商品价格<br>";

// 清理资源
$html->clear();
unset($html);
?>

额外提示

  • 若仍被拦截,可尝试添加更多请求头(如Accept、Referer)或使用代理IP
  • 抓取前请确认目标网站的robots.txt协议及相关法律法规,避免违规

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:50:27