#python #beautifulsoup #python-requests
#python #beautifulsoup #python-запросы
Вопрос:
я пишу код на python, используя beautifulsoup для извлечения данных с сайта онлайн-покупок, но у меня проблема с извлечением, поскольку оно было написано в 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)
Ответ №1:
Возможно, вы захотите попробовать это:
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%']
Ответ №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)