python-3.x - 提取嵌入在某个类下的文本
问题描述
从要提取的数据中提取表格在特定类下提取文本并存储在相应的列表中
我正在尝试从“ 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 "]')
解决方案
这段代码应该做你想做的事。所有代码在基本级别上所做的都是遵循 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 }
推荐阅读
- flutter - Flutter : [!] 你的应用没有使用 AndroidX
- swift - 按钮在自定义 UI 控件中不起作用
- character-encoding - 集成终端 VS 代码(特殊字符问题)
- javascript - 在 react native 中使用 Stylesheet.create 时遇到问题
- c++ - 如何使用winapi使窗口更新C中的整个背景颜色
- python - 如何使openCV记录帧更快
- wordpress - 仅某些类别的下一个和上一个代码故障
- css - 如何更改物化多选复选框的颜色?
- java - 我尝试运行我的第一个 Java 代码,但出现“符号”错误
- swift - Swift 5 尝试呈现视图不在窗口层次结构中的 ViewController