如何从html跨度值中提取样式值?

2024-06-02 07:57:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写代码,使用beautifulsoup从在线购物网站提取数据,但我在提取ratting时遇到了一个问题,因为它是用html编写的,如下所示:

Sample HTML

我的程序如下,我需要一个更好的方法:

result = requests.get("https://egypt.souq.com/eg-en/laptops-rgx2060/s/?as=1")
src = result.content  # .content
soup = BeautifulSoup(src, 'lxml')

rating = []
rate = soup.find_all("span", {"class": "rating-stars"})
for n in range(len(rate)):
    rate_txt = ""

    zz = re.findall(r"\d", str(rate[n].find("i", {"class": "star-rating-svg"}).find("i")))
    for j in range(len(zz)):
        rate_txt += zz[j]

    rate_txt += "%"
    rating.append(rate_txt)

Tags: 代码insrctxtforlenraterange
2条回答

使用("i", {"class": "star-rating-svg"})将在左侧栏上选择评级值这就是为什么需要try catch,而不是在产品容器或.single-item .star-rating-svg i中查找评级值

rating = []
rate = soup.select(".single-item .star-rating-svg i") # or: .single-item i i
for r in rate:
    rating.append(r["style"].replace('width:', ''))

print(rating)

您可能希望尝试以下方法:

import requests
from bs4 import BeautifulSoup

soup = BeautifulSoup(
    requests.get("https://egypt.souq.com/eg-en/laptops-rgx2060/s/?as=1").content,
    'lxml',
)

rating = []
for i in soup.find_all("i", {"class": "star-rating-svg"}):
    try:
        rating.append(i.find("i")["style"].rsplit(":")[-1])
    except KeyError:
        continue

print(rating)

输出:

['0%', '94%', '80%', '88%', '74%', '80%', '90%', '80%', '74%', '80%', '80%', '82%', '82%', '76%', '68%', '90%', '80%', '20%', '94%', '100%', '96%', '20%', '0%', '0%']

相关问题 更多 >