При использовании множественных исключений в коде 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 шт):
подскажите в чём причина:
Это типичная ошибка для BS4. Возникает она, когда на предыдущем шаге поиска элемент НЕ найден (его значение None), а вы пытаетесь использовать методы BS4, которые определены только для реальных элементов дерева объектов.
name = moon.find('div', class_='font-0 vertical-m').find('h1', ....
Могу предположить, что:
- moon имеет значение None (т.е. не был найден ранее)
- поиск тега с классом 'font-0 vertical-m' не дал результатов
Рекомендую:
- Никогда не писать длинные составные выражения поиска. Разбейте их по шагам. Краткость не всегда сестра таланта.
- Проверяйте результат каждого такого шага на успешность.