Извлечение текста, встроенного в <td>в некотором классе - PullRequest
0 голосов
/ 23 января 2019

Таблица данных для извлечения Извлечение текста из определенного класса и сохранение в соответствующих списках

Я пытаюсь извлечь данные из "https://www.airlinequality.com/airline-reviews/vietjetair/page/1/". Я могудля извлечения сводки, обзора и информации о пользователе, но не в состоянии получить табличные данные. Табличные данные должны храниться в соответствующих списках. Разные пользовательские обзоры имеют разное количество оценок. В приведенном ниже коде есть пара вещей, которые я пробовал.Все дают пустые списки. Извлеченный обзор с использованием xpath

(review = driver.find_elements_by_xpath('//div[@class="tc_mobile"]//div[@class="text_content "]') )

Ниже приведены некоторые пути xpath, которые дают пустой список. Здесь я пытаюсь извлечь данные / текст, соответствующие «Типу путешественника»

tot = driver.find_elements_by_xpath('//div[@class="tc_mobile active"]//div[@class="review-stats"]//table[@class="review-ratings"]//tbody//tr//td[@class="review-rating-header type_of_traveller "]//td[@class="review-value "]')

tot1 = driver.find_elements_by_xpath('//div[@class="tc_mobile"]//div[@class="review-stats"]//table//tbody//tr//td[@class="review-rating-header type_of_traveller "]//td[@class="review-value "]')


tot2 = driver.find_elements_by_xpath('//div//div/table//tbody//tr//td[@class="review-rating-header type_of_traveller "]//td[@class = "review-value "]')

1 Ответ

0 голосов
/ 23 января 2019

Этот код должен делать то, что вы хотите.Весь код, выполняемый на базовом уровне, следует структуре DOM, а затем выполняет итерацию по каждому элементу на этом уровне.

Он извлекает значения в словарь для каждого обзора, а затем добавляет их в список результатов:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.airlinequality.com/airline-reviews/vietjetair/page/1/")
review_tables = driver.find_elements_by_xpath('//div[@class="tc_mobile"]//table[@class="review-ratings"]//tbody')  # Gets all the review tables

results = list()  # A list of all rating results
for review_table in review_tables:
    review_rows = review_table.find_elements_by_xpath('./tr')  # Gets each row from the table
    rating = dict()  # Holds the rating result
    for row in review_rows:
        review_elements = row.find_elements_by_xpath('./td')  # Gets each element from the row
        if review_elements[1].text == '12345':  # Logic to extract star rating as int
            rating[review_elements[0].text] = len(review_elements[1].find_elements_by_xpath('./span[@class="star fill"]'))
        else:
            rating[review_elements[0].text] = review_elements[1].text
    results.append(rating)  # Add rating to results list

Пример ввода данных обзора в список результатов:

{"Дата выполнения": "Январь 2019", "Соотношение цены и качества": 2, "Служба персонала салона": 3, "Маршрут": "Хошимин в Бангкок", "Тип путешественника": "Бизнес", "Рекомендуется": "Нет", "Комфорт сиденья": 3, "Полет в кабине"":" Эконом класс "," Наземная служба ": 1}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...