Вам нужно пройти все 10 страниц обзоров и игнорировать 10 других обзоров продуктов в нижней части каждой страницы, которые также используют класс avg-stars
, попробуйте что-то подобное, что сначала изолирует только обзоры для Samsung Galaxy S9 Телефон перед поиском класса avg-stars
:
from bs4 import BeautifulSoup
import requests
def main():
all_review_stars = []
base_url = 'https://www.influenster.com/reviews/samsung-galaxy-s9?review_page='
last_page_num = 10
for page_num in range(1, last_page_num + 1):
page_link = base_url + str(page_num)
page_response = requests.get(page_link, headers={'User-Agent': 'Mozilla/5.0'}, timeout=5)
page_content = BeautifulSoup(page_response.content, "html.parser")
reviews_stars_for_page = page_content.find_all("div", class_="review-item-stars")
for review_stars in reviews_stars_for_page:
all_review_stars.append(review_stars.find("div", class_="avg-stars")['data-stars'])
print(f"Got stars for page {page_num}")
print(f"Retrived the stars given from {len(all_review_stars)} reviews")
all_review_stars = list(map(int, all_review_stars))
print(all_review_stars)
if __name__ == '__main__':
main()
Выход:
Got stars for page 1
Got stars for page 2
Got stars for page 3
Got stars for page 4
Got stars for page 5
Got stars for page 6
Got stars for page 7
Got stars for page 8
Got stars for page 9
Got stars for page 10
Retrived the stars given from 94 reviews
[5, 5, 5, 4, 5, 5, 5, 4, 3, 5, 3, 5, 5, 5, 5, 5, 4, 5, 5, 4, 5, 5, 5, 5, 3, 5, 5, 4, 5, 5, 4, 2, 5, 5, 3, 5, 5, 4, 5, 5, 5, 5, 5, 4, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 4, 4, 4, 2, 5, 4, 5, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 5, 4, 4, 5, 5, 4, 5]