如何提取嵌套在特定 <div> 中的 <i> 的所有属性值

How to extract all attribute values of <i> nested in a specific <div>

我正在抓取一个网站,在该网站上我有一个具有不同价值的重复项。

一个 div 项目的例子是这样的:

<div class="lang">
<i class="flag fr" qtip-tooltip="Français"></i>
<i class="flag nl" qtip-tooltip="Néerlandais"></i>
<i class="flag gb" qtip-tooltip="Anglais"></i>
<i class="flag it" qtip-tooltip="Italien"></i>
</div>

我想获取字符串中所有 gtip-tooltip 值的 list 或每个 div 的列表。我该怎么做?

我试过了

langs = driver.find_elements(by=By.XPATH,value='//div[@class="lang"]') 

但我得到空字符串值。

尝试:

elements = driver.find_elements_by_css_selector('div.lang') 

然后您可以通过循环访问您的变量来访问您的元素:

For element in elements :
  print(element)

您已经非常接近您的目标 - 要实现它,只需遍历 langsResultSet,找到每个 <div> 的所有 <i> 元素并提取它们再次迭代时的属性:

langs = driver.find_elements(By.XPATH,'//div[@class="lang"]')
for lang in langs:
    tooltips = [l.get_attribute('qtip-tooltip') for l in lang.find_elements(By.XPATH,'.//i')]
    
    ## as list
    print(tooltips)
   
    ## as comma separated string
    print(','.join(tooltips))
输出
['Français', 'Néerlandais', 'Anglais', 'Italien']

Français,Néerlandais,Anglais,Italien

要将所有 div 语言作为一种 list 或更好的一种 set 并具有独特的价值,您可以使用:

set(l.get_attribute('qtip-tooltip') for l in driver.find_elements(By.XPATH,'//div[@class="lang"]/i'))

输出

{'Anglais', 'Français', 'Italien', 'Néerlandais'}