【发布时间】: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何时为空?