【发布时间】:2021-09-19 10:32:30
【问题描述】:
我想遍历父节点并检查父节点是否有某个子节点并从中提取数据。
网站的脚本是这样的:
<div @class="reviews">
<div @id = "user1">
<div @class="name"> Will </div>
<div @class="weight"> 50kg </div>
<div @class="height"> 160cm </div>
</div>
<div @id = "user2">
<div @class="weight"> 55kg </div>
<div @class="height"> 170cm </div>
</div>
<div @id = "user3">
<div @class="name"> Ben </div>
<div @class="height"> 180cm </div>
</div>
</div>
到目前为止,我的代码如下所示:
import csv
import os
import pandas as pd
from selenium import webdriver
chromedriver = "path to chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get( 'url of a website')
name_row = []
weight_row = []
height_row = []
for i in range(len(driver.find_element_by_xpath('//div[@class="reviews"/div'):
# Get the first parent (user1)
driver.find_element_by_xpath('(//div[@class="reviews"/div)' + '[' + str(i + 1) + ']')
# Check if it has elements like name, weight, and height and add it to appropriate list.
# For example, name_row.append(driver.find_element_by_xpath("xpath to name if it exists")
# If missing any element return "None"
# Then move on to the second parent (user2) and so on
df = pd.DataFrame({'Names': name_row, 'Weight': weight_row, 'Height': height_row})
我希望我的最终结果看起来像
| Name | Weight | Height |
|---|---|---|
| Will | 50kg | 160cm |
| None | 55kg | 170cm |
| Ben | None | 180cm |
我也看过其他帖子,但似乎找不到我正在寻找的答案。
我尝试只做 find_elements_by_xpath 并将每个名称、重量和高度值放在它们各自的列表中,但这不会在这些列表中的任何一个中包含“无”值,最终给我错误的数组长度不一样等等。
【问题讨论】:
标签: python css selenium web-scraping xpath