Вы можете использовать селектор attribute = value и передавать класс со своим значением в качестве подстроки с ^, начинающимся с оператора, чтобы учесть различные звездные значения, которые составляют часть значения атрибута.
Или, проще, используйте селектор типа span
для выбора дочерних диапазонов.
.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN span
В этой строке:
values=soup3.select('.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN [class^="ui_bubble_rating bubble_"]')
Первая частьселектор, читая слева направо, выбирает для родительского класса этих рейтингов.Следующее пространство является комбинатором-потомком, объединяющим следующий селектор attribute = value, который собирает список подходящих дочерних элементов.Как уже упоминалось, вы можете заменить это просто с помощью span.
Код:
import requests
from bs4 import BeautifulSoup
import re
review_pages=requests.get("https://www.tripadvisor.com/Hotel_Review-g60745-d94367-Reviews-Harborside_Inn-Boston_Massachusetts.html")
soup3=BeautifulSoup(review_pages.content,'lxml')
values=soup3.select('.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN [class^="ui_bubble_rating bubble_"]') #.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN span
Value_1 = values[-1]
print(Value_1['class'][1])
stars = re.search(r'\d', Value_1['class'][1]).group(0)
print(stars)
Хотя я использую re, я думаю, что это излишне, и вы можете просто использовать replace.