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

使用Curl & simple_html_dom爬取速卖通商品价格失败求助

解决速卖通商品价格爬取的「Trying to get property 'plaintext' of non-object」错误

这个错误的核心原因很明确:你的选择器没有在curl获取到的HTML中找到对应元素,find()方法返回了null,之后你直接尝试访问null的plaintext属性,就触发了这个Notice。下面分步骤帮你排查解决:

1. 先确认curl请求是否拿到了正常页面内容

速卖通有严格的反爬机制,默认的curl请求头会被识别为爬虫,可能返回验证码页面、跳转提示或者不完整的页面。你需要先模拟浏览器的请求头,同时调试查看实际获取的内容:

// 初始化curl并配置浏览器请求头
$curl = new \Curl\Curl();
// 模拟Chrome浏览器的请求标识
$curl->setHeader('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');
$curl->setHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8');
$curl->setHeader('Accept-Language', 'en-US,en;q=0.5');
$curl->setHeader('Connection', 'keep-alive');
$curl->setHeader('Upgrade-Insecure-Requests', '1');

$curl->get('https://www.aliexpress.com/item/32844492002.html');
$response = $curl->getRawResponse();

// 先输出响应内容,检查是否是正常的商品页面
echo htmlspecialchars($response);

如果输出的是验证码页面或"Access Denied"提示,说明你需要进一步处理反爬(比如添加有效Cookie、使用代理);如果是正常的商品页面,继续下一步。

2. 更新元素选择器

速卖通的页面结构经常迭代,你原来的选择器大概率已经失效。建议用浏览器开发者工具(F12)打开目标商品页,定位价格元素,获取最新的选择器:

比如当前该商品的价格元素可能对应这样的选择器(示例,需以实际页面为准):

div.product-price-container span.product-price

3. 添加错误处理,避免直接访问非对象

即使选择器正确,也可能因为网络波动、页面加载异常导致找不到元素,所以一定要先判断find()的结果是否存在:

$html4 = new simple_html_dom();
$html4->load($response);

// 先查找元素,判断是否存在后再访问属性
$priceElement = $html4->find("div.product-price-container span.product-price", 0);
if ($priceElement) {
    $price2 = $priceElement->plaintext;
    echo $price2;
} else {
    echo "无法找到价格元素,请检查选择器或页面内容";
}

额外提醒

  • 速卖通的商品价格可能是通过JavaScript动态渲染的,如果curl获取的静态HTML中没有价格,你需要改用支持JS渲染的工具(比如Puppeteer、Selenium),而不是simple_html_dom这类静态解析库。
  • 爬取速卖通数据需要遵守其网站的服务条款和robots.txt规则,避免触发反爬限制导致IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:34:11