【问题标题】:find_elements - Selenium (Python) : How to fill with nulls (or with other values) instead of blankfind_elements - Selenium (Python):如何填充空值(或其他值)而不是空白
【发布时间】:2020-02-03 08:45:14
【问题描述】:

早上好,

我正在尝试做一个网络抓取项目。运行项目后,我期望得到一个包含 600 个值的列表,但我得到一个包含 450 个值的列表。

我知道 FindElements 将使用找到的值创建一个列表,但我想知道是否有任何方法可以获得包含 600 个值的列表。

我以为我可以用 na 填充未找到的值,但我找不到正确的方法。如果我没记错的话,我应该在 i.text 为空时附加一个 nan 。这是我的代码:

def Prices():
    global prices
    global prices2
    prices=[]
    try:  
        for i in driver.find_elements_by_class_name('eur'):
            if i.text != "":
                prices.append(i.text)
            else:
                prices.append(np.nan)
        print(prices)
    except NoSuchElementException as e:
        print (e)
        return prices

然后我想。如果我不能附加一个 nan,也许我可以附加另一个元素。所以我找到了另一个元素来抓取,并使用了以下代码:

    def Prices_function():
        prices=[]
        try:  
            for i in driver.find_elements_by_class_name('eur'):
                if i.text != "":   
                    prices.append(i.text)
                else:
                    for i in driver.find_elements_by_class_name('eur_m'):
                        prices.append(i.text)        

      print(prices)
        except NoSuchElementException as e:
            print (e)
            return prices


但是这段代码也不起作用。我想知道为什么这些代码都不起作用?

谁能帮我理解它们?

非常感谢您的帮助!!

【问题讨论】:

  • 如果driver.find_elements_by_class_name('eur_m') 是一个空列表,您想插入None
  • 如果你使用 selenium find_elements,它将返回所有找到的结果。所以为空的元素将返回空字符串("")而不是返回None
  • @Guy 现在可能更好:) 当找不到结果时,我想附加一个 nan 值
  • @MinhDao 谢谢 :) 这正是我在描述中所说的。我知道这一点,但我想知道我是否可以做任何事情来看看 Selenium 没有找到哪些值。
  • @Marta 实际上没有。请将其格式化为正确的 Python 格式。这段代码也不完全是 Python(i.text.size() 不会编译)。而且还不清楚何时要插入 None 值。 i.text 何时为空? driver.find_elements_by_class_name 何时为空?

标签: python list selenium null


【解决方案1】:

要定位所有 600 个元素,您可以使用 css_selector 来定位类 eur 或类 eur_m 的元素

 elements = driver.find_elements_by_css_selector('.eur, .eur_m')

您也可以定位以eur 类开头的元素,但它可能会找到更多元素,具体取决于 html

elements = driver.find_elements_by_css_selector('[class^="eur"]')

并获取文本

prices = [el.text for el in elements]

【讨论】:

  • driver.find_elements_by_css_selector('.eur, .eur_m') 正是我想要的。它起作用了:) 虽然你能解释为什么你使用 css_selector 即使 .eur 和 .eur_m 是 class_names 吗?
  • @Marta by_class_name 只能按单个类定位,按多个类定位,或使用其他参数(如或, 在这种情况下)你需要使用@987654330 @ 或 xpath.
  • 我现在明白了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 2023-02-04
  • 1970-01-01
  • 2021-10-15
  • 2013-09-06
相关资源
最近更新 更多