首页 > 解决方案 > 提取嵌入在某个类下的文本

问题描述

从要提取的数据中提取表格在特定类下提取文本并存储在相应的列表中

我正在尝试从“ 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 "]')

标签: python-3.xselenium-webdriver

解决方案


这段代码应该做你想做的事。所有代码在基本级别上所做的都是遵循 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 年 1 月”,“物有所值”:2,“客舱服务人员”:3,“路线”:“胡志明市到曼谷”,“旅行者类型”:“商务”, “推荐”:“否”,“座位舒适度”:3,“客舱飞行”:“经济舱”,“地勤服务”:1 }


推荐阅读