gpt4 book ai didi

python - 使用 Python 和 Selenium 进行抓取 - 如果元素不存在,我应该如何返回 'null'

转载 作者:行者123 更新时间:2023-12-01 08:43:07 25 4
gpt4 key购买 nike

美好的一天,我是 Python 和 Selenium 的新手,现在已经寻找解决方案一段时间了。虽然有些答案很接近,但我找不到能解决我的问题的答案。我的代码片段有一个小问题,如下:

for url in links:
driver.get(url)
company = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[2]/ul/li/div/div[1]/span""")
date = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[1]/div[1]/div[2]/div/span""")
title = driver.find_elements_by_xpath("""//*[@id="page-title"]/span""")
urlinf = driver.current_url #url info

num_page_items = len(date)

for i in range(num_page_items):
df = df.append({'Company': company[i].text, 'Date': date[i].text, 'Title': title[i].text, 'URL': urlinf[i]}, ignore_index=True)

虽然如果所有元素都存在(并且我可以看到 Pandas 数据帧的输出),那么这确实有效,但如果其中一个元素不存在(“日期”或“标题”),Python 会发出错误:

IndexError: list index out of range

到目前为止我已经尝试过:

1) 创建了一个 try/except (不起作用)2)尝试if/else(如果变量不是“”)

如果元素不存在,我想插入“Null”,以便在元素不存在时 Pandas 数据框填充“Null”。

任何帮助和指导将不胜感激。

编辑 1:

我尝试过以下方法:

for url in links:
driver.get(url)
try:
company = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[2]/ul/li/div/div[1]/span""")
date = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[1]/div[1]/div[2]/div/span""")
title = driver.find_elements_by_xpath("""//*[@id="page-title"]/span""")
urlinf = driver.current_url #url info
except:
pass
num_page_items = len(date)

for i in range(num_page_items):
df = df.append({'Company': company[i].text, 'Date': date[i].text, 'Title': title[i].text, 'URL': urlinf[i]}, ignore_index=True)

和:

for url in links:
driver.get(url)
try:
company = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[2]/ul/li/div/div[1]/span""")
date = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[1]/div[1]/div[2]/div/span""")
title = driver.find_elements_by_xpath("""//*[@id="page-title"]/span""")
urlinf = driver.current_url #url info
except (NoSuchElementException, ElementNotVisibleException, InvalidSelectorException):
pass

num_page_items = len(date)

for i in range(num_page_items):
df = df.append({'Company': company[i].text, 'Date': date[i].text, 'Title': title[i].text, 'URL': urlinf[i]}, ignore_index=True)

和:

for url in links:
driver.get(url)
try:
company = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[2]/ul/li/div/div[1]/span""")
date = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[1]/div[1]/div[2]/div/span""")
title = driver.find_elements_by_xpath("""//*[@id="page-title"]/span""")
urlinf = driver.current_url #url info
except:
i = 'Null'
pass

num_page_items = len(date)

for i in range(num_page_items):
df = df.append({'Company': company[i].text, 'Date': date[i].text, 'Title': title[i].text, 'URL': urlinf[i]}, ignore_index=True)

我在附加到 Pandas 时尝试了相同的 try/except 。

编辑 2我得到的错误:

IndexError: list index out of range

归因于以下行:

df = df.append({'Company': company[i].text, 'Date': date[i].text, 'Title': title[i].text, 'URL': urlinf[i]}, ignore_index=True)

最佳答案

正如您的错误所示,您有一个索引错误!

要克服这个问题,您应该在引发此错误的区域内添加一个 try except 。

此外,您正在使用返回 URL 的 driver.current_url。但是在您的内部 for 循环中,您试图将其作为列表引用...这可能是错误的根源...

根据您的情况,请尝试以下操作:

for url in links:
driver.get(url)
company = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[2]/ul/li/div/div[1]/span""")
date = driver.find_elements_by_xpath("""//*[contains(@id, 'node')]/div[1]/div[1]/div[2]/div/span""")
title = driver.find_elements_by_xpath("""//*[@id="page-title"]/span""")
urlinf = driver.current_url #url info

num_page_items = len(date)
for i in range(num_page_items):
try:
df = df.append({'Company': company[i].text, 'Date': date[i].text, 'Title': title[i].text, 'URL': urlinf}, ignore_index=True)
except IndexError:
df.append(None) # or df.append('Null')

希望您觉得这对您有帮助!

关于python - 使用 Python 和 Selenium 进行抓取 - 如果元素不存在,我应该如何返回 'null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53424252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com