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

如何使用BeautifulSoup提取div标签的rating-value属性值

如何用BeautifulSoup提取HTML标签的rating-value属性值

让我来帮你解决这个问题——你之前的写法之所以失败,是因为对BeautifulSoup选择元素的逻辑理解有点偏差,咱们一步步理清:

先分析你之前的错误

  1. div.rating-value写法错误:这个是CSS类选择器的语法,它会寻找class属性为rating-value的div,但你要找的是带有rating-value这个自定义属性的div,不是class,所以返回None很正常。
  2. 直接取div['rating-value']触发KeyError:你直接取了results[0]里的第一个div,但这个div大概率没有rating-value属性,自然会报错。

正确的实现方法

我们需要精准定位到带有rating-value属性的div元素,然后提取它的属性值,这里有两种可靠的写法:

方法1:使用find()配合attrs参数

通过attrs指定要查找的属性,确保找到带有rating-value属性的div:

# 在第一个OfferBox里找带有rating-value属性的div
rating_div = results[0].find('div', attrs={'rating-value': True})
# 先判断是否找到元素,避免报错
if rating_div:
    review_rating = rating_div['rating-value']  # 或者用rating_div.get('rating-value')
else:
    review_rating = "暂无评分"

方法2:使用CSS选择器select_one()

CSS选择器里[属性名]可以匹配带有该属性的元素,写法更简洁:

rating_div = results[0].select_one('div[rating-value]')
if rating_div:
    review_rating = rating_div.get('rating-value', "暂无评分")  # get方法可以指定默认值
else:
    review_rating = "暂无评分"

修正后的完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

website = 'https://www.laptopsdirect.co.uk/ct/laptops-and-netbooks/laptops?fts=laptops'
response = requests.get(website)
soup = BeautifulSoup(response.content, 'lxml')
results = soup.find_all('div', class_='OfferBox')

# 获取产品名称和价格(strip=True去除多余空格换行)
name = results[0].find('a', class_='offerboxtitle').get_text(strip=True)
price = results[0].find('span', class_='offerprice').get_text(strip=True)

# 获取评分
rating_div = results[0].select_one('div[rating-value]')
review_rating = rating_div.get('rating-value', "暂无评分") if rating_div else "暂无评分"

# 打印结果
print(f"产品名称: {name}")
print(f"价格: {price}")
print(f"评分: {review_rating}")

额外小提示

  • 使用get_text(strip=True)可以去除文本前后的空格和换行,让输出更整洁。
  • 用get('属性名', 默认值)比直接用['属性名']更安全,即使属性不存在也不会报错,而是返回你指定的默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:37:39