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

Python BeautifulSoup如何仅提取首个匹配元素的class名称字符串

问题根因

你代码里用的findAll()会抓取页面中所有class为star-rating的<p>标签,测试页面除了顶部的书籍主评分,下方评论区、相关推荐板块的评分也使用了相同的class名,因此会抓到大量无关结果。另外你写的内层属性遍历、del reviews[1]逻辑本身存在问题,会导致重复取值输出。

修正方案

将findAll()替换为find()即可,该方法找到第一个匹配标签后就会停止检索,不会继续抓取后续同类型标签,完全匹配你只取第一个评分的需求。

修正后的代码:

# 直接定位第一个星级评分标签,无需循环遍历所有匹配元素
star_tag = book_url_soup.find('p', class_="star-rating")
# 星级标签的class属性为列表,第二个元素就是对应的评论文本
review = star_tag['class'][1]
reviews.append(review)
print(review)

运行代码后只会输出目标书籍的主评分Two,不会再抓取到页面下方其他无关的星级评分。

补充说明:如果你使用的是较新版本的BeautifulSoup4,建议将旧写法findAll替换为标准写法find_all,避免后续出现版本兼容问题。如果一定要用find_all,也可以取返回列表的第一个元素:book_url_soup.find_all('p', class_="star-rating")[0],效果和find()一致,但find()执行效率更高,不需要遍历完页面所有匹配元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:57:20