【问题标题】:Scraping the attribute of the first child from multiple div (selenium)从多个div(硒)中刮取第一个孩子的属性
【发布时间】:2022-01-25 20:06:27
【问题描述】:

我正在尝试从多个 div 中删除第一个孩子 (span) 的类名。

这里是html代码:

<div class="ui_column is-9">
   <span class="name1></span>
   <span class="...">...</span>
   ...
<div class ="ui_column is-9">
   <span class="name2></span>
   <span class="...">...</span>
   ...
<div class ..

页面的URL获取完整代码。

我正在使用前五个 div 的代码来完成这项任务:

i=0
liste=[]

while i <= 4: 

    parent= driver.find_elements_by_xpath("//div[@class='ui_column is-9']")[i]    
    child= parent.find_element_by_xpath("./child::*")                              
    class_name= child.get_attribute('class')                                  
    i = i+1
    liste.append(nom_classe)

但是你知道是否有更简单的方法吗?

【问题讨论】:

  • 您是否尝试提取 类名 ui_bubble_rating bubble_50
  • 没错,我对“bubble_”(bubble_XX)后面的数字很感兴趣

标签: python selenium xpath parent-child


【解决方案1】:

您可以直接获取所有这些第一个span元素,然后提取它们的class属性值如下:

liste = []
first_spans = driver.find_elements_by_xpath("//div[@class='ui_column is-9']//span[1]")
for element in first_spans:
    class_name= element.get_attribute('class')
    liste.append(class_name)

您还可以仅通过将循环限制为 5 次迭代来从 5 个第一个元素中提取 class 属性值
UPD
好吧,更新您的问题后,答案变得不同且简单得多。
您可以直接获取所需的元素并提取其类名属性值,如下所示:

liste = []
first_spans = driver.find_elements_by_xpath("//div[@class='ui_column is-9']//span[contains(@class,'ui_bubble_rating')]")
for element in first_spans:
    class_name= element.get_attribute('class')
    liste.append(class_name)

【讨论】:

  • 谢谢 ;) 但是,在我的情况下,您的解决方案也废弃了孩子的孩子。
  • 我根据您在问题中提出的 XML 结构构建了 XPath。这里第一个孩子span 没有孩子,但是第二个span 有孩子,我们不在乎。如果实际的 XML 结构不同,请更新您的问题
  • 我用我要报废的页面的 URL 更新我的帖子。父div的类名和我之前分享的简化代码一样。
  • 好的,我明白了。请查看我的更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2014-01-13
  • 1970-01-01
相关资源
最近更新 更多