我有以下网页
</div><a href="https://www.emag.ro/laptop-lenovo-thinkbook-15-iil-cu-procesor-intel-core-i7-1065g7-pana-la-3-90-ghz-15-6-full-hd-16gb-512gb-ssd-intel-iris-plus-graphics-free-dos-mineral-grey-20sm003jrm/pd/DKBK1TMBM/#reviews-section" rel="nofollow" class="star-rating-container js-product-url" data-zone="reviews"><div class="star-rating star-rating-read rated-4.02 star-rating-sm ">
<div class="star-rating-inner " style="width: 100%"></div>
</div><div class="star-rating-text ">
我想从此产品中提取评级。 对于此产品,评级在此处定义。
<div class="star-rating star-rating-read rated-4.02 star-rating-sm ">
并且我无法提取 4.02。
我的代码如下所示:
rating = container.find_all(class_="star-rating star-rating-read rated")[0].text
我知道上面的代码不行,我能够提取价格和产品名称,但我无法提取评级:(
问题在于你尝试使用
.text
从一个没有直接文本内容的标签中提取文本。
rated-4.02
实际上是 class 属性的一部分,而不是标签内的文本。
这里是如何提取评分的修正后的代码:
from bs4 import BeautifulSoup
html = """
</div><a href="https://www.emag.ro/laptop-lenovo-thinkbook-15-iil-cu-procesor-intel-core-i7-1065g7-pana-la-3-90-ghz-15-6-full-hd-16gb-512gb-ssd-intel-iris-plus-graphics-free-dos-mineral-grey-20sm003jrm/pd/DKBK1TMBM/#reviews-section" rel="nofollow" class="star-rating-container js-product-url" data-zone="reviews"><div class="star-rating star-rating-read rated-4.02 star-rating-sm ">
<div class="star-rating-inner " style="width: 100%"></div>
</div><div class="star-rating-text ">
"""
soup = BeautifulSoup(html, 'html.parser')
# 使用 find() 方法找到包含评分的 div 元素
rating_div = soup.find('div', class_='star-rating')
# 从 class 属性中提取评分
rating = rating_div['class']
# 找到包含 "rated-" 的类并从中提取评分
for c in rating:
if 'rated-' in c:
rating = c.split('-')[1]
break
print(rating) # 输出: 4.02
这个代码会:
- 使用 BeautifulSoup 解析 HTML。
-
使用
find()
方法找到包含评分的div
元素。 -
获取
div
元素的所有 class 属性。 - 迭代所有 class 属性,找到包含 "rated-" 的那个。
- 使用字符串分割从找到的 class 属性中提取评分。
这样你就可以成功地从 HTML 中提取评分 4.02 了。
标签:python,web-scraping,beautifulsoup From: 67545722