Невозможно очистить данные с помощью bs4 - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь получить звездный рейтинг для данных "value" из отелей Trip Advisor, но я не могу получить данные, используя имя класса: Ниже приведен код, который я пытался использовать:

review_pages=requests.get("https://www.tripadvisor.com/Hotel_Review-g60745-d94367-Reviews-Harborside_Inn-Boston_Massachusetts.html")  
soup3=BeautifulSoup(review_pages.text,'html.parser')   
value=soup3.find_all(class_='hotels-review-list-parts-AdditionalRatings__bubbleRating--2WcwT')    
Value_1=soup3.find_all(class_="hotels-review-list-parts-AdditionalRatings__ratings--3MtoD")

Когда я пытаюсь захватить значения, он возвращает пустой список.Любое направление будет действительно полезным.Я пробовал несколько имен классов, которые есть на этой странице, но я получаю различные поля, такие как Данные, отзывы и т. Д., Но я не могу получить пузырьковые оценки только для службы.

1 Ответ

1 голос
/ 07 марта 2019

Вы можете использовать селектор 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.

...