AttributeError: 'NoneType' object has no attribute 'get_text'

Помогите решить проблему. Пишу свой первый парсер и столкнулся с проблемой, не могу вытащить текст из 'div'. Причем в строке где я вывожу описание машины всё прекрасно работает.

import requests
from bs4 import BeautifulSoup

url = 'https://auto.drom.ru/audi/'
headers = {
'user-agent':'Mozilla/5.0'
}
response = requests.get(url, headers=headers)
print(response.status_code)
bs = BeautifulSoup(response.content, 'html.parser')
block = bs.find('div', class_="css-1nvf6xk eojktn00").find_all('a', class_="css-4zflqt e1huvdhj1")
data = []
for bl in block:
    data.append({
        "название":bl.find('div', class_="css-jlnpz8 e1icyw250").find('div', class_="css-16kqa8y e3f4v4l2").get_text(),
        "описание": bl.find('div', class_="css-jlnpz8 e1icyw250").find(class_="css-1fe6w6s e162wx9x0").get_text(),
        "ссылка":bl.get('href')
    
})
print(data)

введите сюда описание изображения

Output:

{'название': <div class="css-16kqa8y e3f4v4l2" data-ftid="bull_title">Audi Q8, 2019</div>, 'описание': '3.0 л (286 л.с.) дизель автомат 4WD 93 500 км', 'цена': '7 099 000 ₽', 'ссылка': 'https://auto.drom.ru/moscow/audi/q8/495003442.html'}

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

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

Попробовал не лезть во внутрь класса, а просто вывести текст и отформатировать его

import requests
from bs4 import BeautifulSoup
import csv

url = 'https://auto.drom.ru/audi/'
headers = {
'user-agent':'Mozilla/5.0'
}
response = requests.get(url, headers=headers)
print(response.status_code)
bs = BeautifulSoup(response.content, 'html.parser')
block = bs.find('div', class_="css-1nvf6xk eojktn00").find_all('a', class_="css-4zflqt e1huvdhj1")
data = []
for bl in block:
data.append({
    "название":bl.find('div', class_="css-jlnpz8 e1icyw250").get_text().split(',')[0],
    "описание": bl.find('div', class_="css-jlnpz8 e1icyw250").find(class_="css-1fe6w6s e162wx9x0").get_text().replace(',',''),
    "цена":bl.find('span', class_="css-46itwz e162wx9x0").get_text().replace('\xa0',' '),
    "ссылка":bl.get('href'),
    
})

Output:

{'название': 'Audi Q8', 'описание': '3.0 л (286 л.с.) дизель автомат 4WD 93 500 км', 'цена': '7 099 000 ₽', 'ссылка': 'https://auto.drom.ru/moscow/audi/q8/495003442.html'}
→ Ссылка
Автор решения: Vivi

Причин почему так может быть несколько.

  • Одну из них я уже назвал: элемента с таким классом просто нет на странице. Если примените getText() к None, то получите ошибку 'NoneType' object has no attribute 'get_text'. Также не стоит забывать, что скорее всего структура страницы возможно меняется со временем, если на сайте реализована такая защита от парсинга, из-за этого классы, к которым вы обращались ранее, могут быть неактуальны и возвращать None при их поиске. Из практики могу сказать, что могут проскакивать некоторые уникальные классы вместо привычных. Так например, могут проскакивать объявления, где могут изменяться классы определенного типа объявления, например "объявление закрыто", "машина продана" и т.д.
  • Возможно, страница загружается динамически (с помощью JS) и некоторые данные веб страницы не могут быть доступны в данный момент, и возвращает None, когда в инспекторе вы чётко видите, что элемент доступен.
  • Также хочу заметить наличие избыточной цепочки find. Вы уже получили ссылку внутри которой находятся нужные вам элементы со своим уникальным классом, так что нет необходимости в поиске класса class_="css-jlnpz8 e1icyw250" с последующем поиском внутри него, можно сразу обращаться к нужному элементу с нужным классом, дабы не делать однотипных действий. Это упрощает поиск ошибок. Но подчеркну, исходная конструкция не должна повлиять на поиск нужных элементов, я посмотрел в инспекторе, ваш код правильный, вероятнее всего нужна дополнительна обработка таких ситуаций внутри кода для определения причин их возникновения.
→ Ссылка