#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