【问题标题】:How to extract all attribute values of <i> nested in a specific <div>如何提取嵌套在特定 <div> 中的 <i> 的所有属性值
【发布时间】:2022-06-11 16:02:42
【问题描述】:

我正在抓取一个网站,我在该网站上经常出现价值不等的情况。

一个 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>

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

我试过了

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

但我得到空字符串值。

你能帮我解决这个问题吗?

【问题讨论】:

    标签: python html selenium web-scraping xpath


    【解决方案1】:

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

    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'}
    

    【讨论】:

    • 抱歉,转移时这是我的错-xpath 选择 lang.find_elements(By.XPATH,'.//i') 必须以 . 开头,以避免您描述的行为。这意味着它必须完全从 div 开始,而不是在整个文档中确定。
    【解决方案2】:

    试试:

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

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

    For element in elements :
      print(element)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-09
      • 2016-03-12
      • 1970-01-01
      • 2022-11-14
      • 2021-02-12
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多