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

如何在PHP爬虫中通过HTML类名抓取数据?获取书籍星级评分

从HTML元素的Class属性中提取书籍评分(PHP XPath实现)

问题场景

需要从类似 <p class="star_rating five"></p> 的HTML元素中提取书籍评分(示例中的five就是评分标识),目前已写出部分PHP XPath代码,想知道如何进一步获取class属性里的评分信息。

用户已编写的代码:

$prices = $xpath->evaluate('//ol[@class="row"]//li//article//div[@class="product_price"]//p[@class="price_color"]');

$rating =$xpath->evaluate('//ol[@class="row"]//li//article//p[@class]');

解决方案

步骤1:精准定位评分元素

当前的$rating XPath会选中所有带class的p标签,容易混入无关元素。可以通过contains(@class, 'star_rating')筛选出仅属于评分的p标签,优化后的XPath:

//ol[@class="row"]//li//article//p[contains(@class, 'star_rating')]

步骤2:提取并处理class属性中的评分

遍历选中的元素,获取class属性值后拆分,过滤掉固定的star_rating,剩下的就是评分标识。如果需要转换成数字评分,还可以做映射处理。

完整代码示例:

// 精准定位所有评分元素
$ratingElements = $xpath->evaluate('//ol[@class="row"]//li//article//p[contains(@class, "star_rating")]');

$ratings = [];
// 可选:将英文评分映射为数字
$ratingMap = [
    'one' => 1,
    'two' => 2,
    'three' => 3,
    'four' => 4,
    'five' => 5
];

foreach ($ratingElements as $element) {
    // 获取元素的class属性值
    $classValue = $element->getAttribute('class');
    // 按空格拆分class属性,同时去除首尾空格
    $classParts = explode(' ', trim($classValue));
    // 过滤掉"star_rating",得到评分标识
    $ratingLabel = array_diff($classParts, ['star_rating']);
    $ratingLabel = reset($ratingLabel);
    
    // 可选:转换成数字评分,否则直接存储英文标识
    $ratings[] = $ratingMap[$ratingLabel] ?? $ratingLabel;
}

// 输出所有评分结果
print_r($ratings);

补充说明

  • 用contains(@class, 'star_rating')可以精准锁定评分元素,避免无关p标签干扰。
  • 拆分class属性时用trim()处理首尾空格,防止出现空数组元素影响后续过滤。
  • 如果页面评分的class规则调整(比如新增其他无关class),只需修改过滤逻辑即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:55:16