Добрый день, я новичок в 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), если один из элементов не't существует (' date 'или' title ') Python отправляет сообщение об ошибке:
IndexError: список индекса выходит за пределы диапазона
то, что я пробовал до сих пор:
1) создал попытку / кроме (не работает) 2) попробовал, если / еще (если переменная не "")
Я хотел бы вставить "Нуль", еслиэлемент не существует, поэтому информационный блок 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)
Я попробовал ту же самую попытку / за исключением точки добавления к Пандам.
РЕДАКТИРОВАТЬ 2 ошибка, которую я получаю:
индексаторror: индекс списка вне диапазона
относится к строке:
df = df.append ({'Company': company [i] .text, 'Date ': date [i] .text,' Title ': title [i] .text,' URL ': urlinf [i]}, ignore_index = True)