У меня есть парсер, который получает информацию с сайта и распределяет ее по разным директориям. В приведенном ниже блоке представлена одна из 6 функций. Некоторые из них работают как Selenium /Webdriver, другие как BeautifulSoup. Каждая такая функция заключена в блок "try-except" или "try-except-finally". В одном из элементов при работе скрипта возникает ошибка из-за неправильного имени каталога (оно содержит "/"). Я ожидаю, что в случае возникновения каких-либо проблем, должен сработать Except, вывести сообщение об ошибке и вернуть "None". Однако этого не происходит: Python выдает ошибку File "/home/twopercent/Projects/Parse/project/triya/main.py", line 213, in card_info os.mkdir(item_directory) FileNotFoundError: [Errno 2] No such file or directory and interrupts the program. Что я делаю не так? Почему не срабатывает "Try-Except-Finally"?
def card_info(url_list, directory):
useragent = UserAgent()
# options
options = webdriver.FirefoxOptions()
# change useragent
options.set_preference('general.useragent.override', useragent.random)
options.headless = True
driver = webdriver.Firefox(
executable_path='/home/twopercent/Projects/Parse/Firefox_driver/geckodriver',
options=options
)
try:
between_dict = {}
result_dict = []
counter = 0
for url in url_list:
item_time_start = datetime.now()
driver.get(url=url)
driver.set_page_load_timeout(60)
charact_dict = {}
picture_dict = []
item_name = driver.find_element(By.CLASS_NAME, 'header-block').find_element(By.TAG_NAME, 'h1').text
item_price = driver.find_element(By.CLASS_NAME, 'current-price').text
driver.find_element(By.CLASS_NAME, 'description-block').find_element(By.CLASS_NAME,
'show-more-button').click()
charact_sections = driver.find_element(By.CLASS_NAME, 'description-block').find_elements(By.CLASS_NAME,
'prop-group')
for item in charact_sections:
name_sect = item.find_element(By.TAG_NAME, 'header').text
data_char_dict = {}
data_char_block = item.find_elements(By.CLASS_NAME, 'prop')
for datas in data_char_block:
data_name = datas.find_element(By.CLASS_NAME, 'name').text
data_value = datas.find_elements(By.TAG_NAME, 'span')[2].text
data_char_dict[data_name] = data_value
charact_dict[name_sect] = data_char_dict
picture_block = driver.find_element(By.CLASS_NAME, 'swiper-container-thumbs')
picture_list = picture_block.find_elements(By.CLASS_NAME, '__picture')
item_directory = f'{directory}/{item_name}'
if not os.path.exists(item_directory):
os.mkdir(item_directory)
counter_photo = 1
for item in picture_list:
pict_href = ('https://www.triya.ru' + item.find_element(By.TAG_NAME, 'source').get_attribute(
'srcset')).replace('320x180', 'original')
pict_href = pict_href.split()[0]
# get_photo(pict_href, item_directory, counter_photo)
counter_photo += 1
picture_dict.append(pict_href)
between_dict['Наименование'] = item_name
between_dict['Цена'] = item_price
between_dict['Характеристики'] = charact_dict
between_dict['Ссылки на картинки'] = picture_dict
result_dict.append(between_dict)
between_dict = {}
item_time_total = datetime.now() - item_time_start
counter += 1
print(f'{item_name} и {len(picture_list)} фоток сохранено за {item_time_total} секунд! Выполнено {counter} из {len(url_list)} штук в папке')
return result_dict
except Exception as ex:
errors_log(ex, f'card_info, category_list: {url}, item: {url_list}')
print(('#' * 15) + f' error {ex} ' + ('#') * 15)
return None
finally:
driver.close()
time.sleep(1)
driver.quit()