如何用PHP Simple HTML DOM Parser读取class为price promo的div中的价格?
解决PHP Simple HTML DOM Parser提取目标价格的问题
咱们来一步步拆解你遇到的问题:你想从带price和promo类的div里提取483.33,但之前的代码没生效,主要是几个小细节没处理对,调整一下就能解决:
问题1:选择器逻辑错误
你用的div.price, div.promo是或的逻辑——匹配所有带price类的div,或者所有带promo类的div。但你的目标元素是同时拥有这两个类的div,正确的选择器应该是div.price.promo(用点连接,代表“同时包含这两个类”)。
问题2:循环用法多余
当你在find()里传入第二个参数0时,它返回的是单个匹配元素,不是数组,所以完全不需要用foreach遍历,直接调用元素的方法就行。
问题3:提取纯数字价格(可选)
如果只需要483.33而不是带单位的完整文本,还需要对plaintext做进一步处理,去掉后面的单位部分。
修正后的完整代码
<?php // 假设$html已经是加载好的Simple HTML DOM对象 $priceElement = $html->find('div.price.promo', 0); if ($priceElement) { // 获取去空白后的完整文本(比如"483.33 zł netto") $fullPriceText = trim($priceElement->plaintext); // 提取纯数字价格 $purePrice = preg_replace('/[^0-9.]/', '', $fullPriceText); echo $purePrice; // 输出483.33 } ?>
代码说明
div.price.promo精准定位到同时拥有两个类的目标div;- 先判断元素是否存在,避免空指针报错;
trim()去掉文本前后的多余空白;- 正则
preg_replace('/[^0-9.]/', '', $fullPriceText)会过滤掉所有非数字和小数点的字符,只保留价格数值。
如果需要保留带单位的完整文本,直接输出$fullPriceText就可以啦。
内容的提问来源于stack exchange,提问作者areactive
相关产品推荐
相关产品推荐

