You need to enable JavaScript to run this app. Beautiful Soup提取含'Overall rating:'文本行对应星级评价的img src数量
优惠活动
大模型
产品
解决方案
定价
更多

Beautiful Soup提取含'Overall rating:'文本行对应星级评价的img src数量

问题解决

你当前写的代码缺少核心的行匹配判断环节:无差别收集所有行下class="review3"的td元素,没有先过滤出包含“Overall rating:”文本的目标行,自然没法精准拿到对应行的评分数值。可以按照下面的逻辑实现:

核心实现思路

  • 遍历每一个<tr>元素时,先在当前行的范围内做文本匹配,确认该行class="review2"的td元素是否为“Overall rating:”对应的行
  • 匹配成功后,再在同一个tr的作用域内查找所有<img>标签,标签的数量就是对应的评分值

可直接运行的示例代码

from bs4 import BeautifulSoup

# 替换为你实际抓取到的网页HTML内容
html_doc = '''
<tr>
 <td class="review2" width="23%"> Overall rating: </td>
 <td>  </td>
 <td class="review3">
   <img hight="18px" src="/img/red_star.gif" width="18px" />
   <img hight="18px" src="/img/red_star.gif" width="18px" />
 </td>
</tr>
<tr>
 <td class="review2" > Effectiveness: </td>
 <td>  </td>
 <td class="review3" > Highly Effective </td>
</tr>
'''

soup = BeautifulSoup(html_doc, 'html.parser')
overall_rating = 0

# 逐行遍历所有tr元素
for tr in soup.find_all('tr'):
    # 查找当前行内class为review2的标签
    review_label = tr.find('td', class_='review2')
    # 跳过无对应标签的无效行,用strip去掉文本前后多余空白后做匹配
    if review_label and review_label.get_text(strip=True) == 'Overall rating:':
        # 在当前行范围内查找所有img标签,计数即为评分
        star_imgs = tr.find_all('img')
        overall_rating = len(star_imgs)

print(f"获取到的总评分为:{overall_rating} 星")

实用调整提示

  • 查找元素时一定要用当前循环的tr作为查找起点,不要全局用soup.find查找,避免串到其他行的内容
  • 如果实际网页中“Overall rating:”后附带了其他冗余文本,没法做到完全相等匹配,可以把判断条件改成包含匹配:
    if review_label and 'Overall rating:' in review_label.get_text(strip=True):
    
    兼容性更强,不会因为多余字符导致匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 03:27:02