При использовании множественных исключений в коде Python всё равно выводится ошибка

При использовании множественных исключений в коде Python всё равно выводится ошибка. Если кто знает подскажите в чём причина:

import bs4
import time
import requests  # pip install requests
from bs4 import BeautifulSoup  # pip install bs4
from selenium import webdriver  # pip install selenium
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager  # pip install webdriver-manager

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36')
chrome_options.add_argument("--disable-blink-features=AutomationControlled")

with webdriver.Chrome(service=Service(ChromeDriverManager().install()),
                      options=chrome_options) as driver:  # Открываем хром
    driver.get(f"https://www.stroyportal.ru/catalog/section-bolty-3128/st60/")  # Открываем страницу
    time.sleep(3)  # Время на прогрузку страницы
    soup = bs4.BeautifulSoup(driver.page_source, 'html.parser')
    heads = soup.find('div', class_='col-12 col-xs-12 order-2 order-xs-2 order-sm-2 catalog_list_items').find_all(
        'div', class_='catalog_list_item')
    print(len(heads))
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    for i in heads:
        try:
            w = i.find_next('div', class_='format_img').find('a', href=True)
            print('https://www.stroyportal.ru' + w['href'])
            get_url = ('https://www.stroyportal.ru' + w['href'])
        except:
            get_url = "https://www.stroyportal.ru/catalog/section-bolty-3128/gayka-soedinitelnaya-m8-702404271/?popup=true"
            break

        stock = requests.get(get_url, headers=headers).text
        moon = BeautifulSoup(stock, 'lxml')
        try:
            name = moon.find('div', class_='font-0 vertical-m').find('h1',
                                                                     class_='d-inline inline-right-16 font-bold font-24')
            print(name.text.strip())
        except Exception:
            name = moon.find('div', class_='col-7 col-sm-6 col-xs-12').find('h1', class_='font-22 font-bold')
            print(name.text.strip())
        except:
            name = 'None'
            print(name)

Traceback (most recent call last): File "C:\Users\user\PycharmProjects\stroyportal_pars\main_3.py", line 36, in name = moon.find('div', class_='font-0 vertical-m').find('h1', ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'find'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "C:\Users\user\PycharmProjects\stroyportal_pars\main_3.py", line 40, in name = moon.find('div', class_='col-7 col-sm-6 col-xs-12').find('h1', class_='font-22 font-bold') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'find'


Ответы (1 шт):

Автор решения: Sergey

подскажите в чём причина:

Это типичная ошибка для BS4. Возникает она, когда на предыдущем шаге поиска элемент НЕ найден (его значение None), а вы пытаетесь использовать методы BS4, которые определены только для реальных элементов дерева объектов.

name = moon.find('div', class_='font-0 vertical-m').find('h1', ....

Могу предположить, что:

  1. moon имеет значение None (т.е. не был найден ранее)
  2. поиск тега с классом 'font-0 vertical-m' не дал результатов

Рекомендую:

  1. Никогда не писать длинные составные выражения поиска. Разбейте их по шагам. Краткость не всегда сестра таланта.
  2. Проверяйте результат каждого такого шага на успешность.
→ Ссылка