BeautifulSoup: Ошибка атрибута: объект «Нетип» не имеет атрибута «текст»

#python #python-3.x #web-scraping #beautifulsoup

Вопрос:

Получение 'NoneType' object has no attribute 'text' ошибки при очистке веб-страницы с помощью BeautifulSoup.

Часть html — документа выглядит следующим образом:

 lt;div class="ntb boy"gt;  lt;olgt;...lt;/olgt;  lt;ul class="nbd"gt;  lt;li class="ntr" data-id="bwjleo"gt;  lt;i class="nvt"gt;...lt;/igt;  lt;dl class="nem"gt;  lt;dt class="nvar"gt;  lt;bgt;  lt;a href="https://www.babynamesdirect.com/boy/aak" title="Meaning and more details of Aak"gt;  Aak  lt;/agt;  lt;/bgt;  lt;/dtgt;  lt;dd class="ndfn"gt;  A Nature; Sky  lt;/ddgt;  lt;/dlgt;  lt;em class="narr"gt;  lt;/emgt;  lt;/ligt;  lt;ligt;...lt;/ligt;  lt;ligt;...lt;/ligt;  .  .  lt;/ulgt; lt;/divgt;  

Код, используемый для извлечения имен(«Aak» в приведенном выше html):

 res = requests.get('https://www.babynamesdirect.com/baby-names/indian/boy/trending') soup = BeautifulSoup(res.text, 'html5lib') ul = soup.find('div', class_ = 'ntb boy').find_all('li') names = [name.dt.text for name in ul] print(names)  

Когда я пытаюсь распечатать name.dt , я получаю bs4.element.Tag . Но имя.дт.текст дайте AttributeError: 'NoneType' object has no attribute 'text' .

Ответ №1:

Вы получаете ошибку, потому что при попытке прямой очистки нет определенных значений.

Например: После имени Накш есть пустое поле, которое выдает ошибку.

вы можете попробовать это, чтобы устранить свою ошибку.

 res = requests.get('https://www.babynamesdirect.com/baby-names/indian/boy/trending') soup = BeautifulSoup(res.text, 'html5lib') ul = soup.find('div', class_ = ['ntb','boy']).find_all('li') for name in ul:  try:  print(name.dt.a.text)  except:  pass