элемент тега bs4 возвращает ‘NoneType’ при попытке извлечь информацию

#python #python-3.x #beautifulsoup

#python #python-3.x #beautifulsoup

Вопрос:

Я пытаюсь извлечь информацию из HTML-кода.

Следующий код работает правильно.

 import requests
from bs4 import BeautifulSoup
 
url = 'https://www.pro-football-reference.com/teams/chi/2019_roster.htm#'

#Create a handle, page, to handle the contents of the website

r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
parsed_table = soup.find_all('table')[0]
for i, row in enumerate(parsed_table.find_all('tr')[2:]):
    dat = row.find('td', attrs={'data-stat':'player'})
    print(dat)
    
    name = dat.a
    print(type(name))
    print(name)
 

Это возвращает список, как и ожидалось

например

 <class 'bs4.element.Tag'>
<a href="/players/J/JackEd01.htm">Eddie Jackson </a>
 

Поскольку «name» является элементом тега для bs4, я ожидаю, что смогу получить возврат из следующего

 name.get('href')
name.get_text()
 

Однако каждый раз, когда я пытаюсь это сделать, я получаю

 AttributeError: 'NoneType' object has no attribute #Whatever attribute I'm requesting
 

Мысли?

Ответ №1:

Вы правы, с name.get() которым все работает по назначению.

В вашей итерации есть row where dat.a is None .

 <class 'NoneType'>
None <tr><th class="left iz" data-stat="pos" scope="row"></th><td class="left" data-stat="player"><b>Defensive Starters</b></td><td class="right iz" data-stat="age"></td><td class="right iz" data-stat="experience"></td><td class="right iz" data-stat="gs"></td><td class="left iz" data-stat="stat_summary"></td><td class="left iz" data-stat="draft_info"></td></tr>
 

Это потому, что это row не содержит <a></a> поля.

Просто добавьте if statment , чтобы проверить, является ли name это или dat.a нет None , затем запустите name.get()

 for i, row in enumerate(parsed_table.find_all('tr')[2:]):
    dat = row.find('td', attrs={'data-stat':'player'})

    name = dat.a
    if name:
        print(name.get('href'))
 

 /players/T/TrubMi00.htm
/players/C/CoheTa00.htm
/players/G/GabrTa00.htm
/players/M/MillAn02.htm
/players/R/RobiAl02.htm
/players/H/HoltJ.01.htm
/players/L/LenoCh00.htm
/players/D/DaniJa01.htm
/players/W/WhitCo03.htm
/players/C/CowaRa00.htm
/players/M/MassBo00.htm
/players/R/RobeRo00.htm
/players/G/GoldEd00.htm
/players/N/NichBi00.htm
/players/M/MackKh00.htm
/players/T/TrevDa00.htm
/players/S/SmitRo07.htm
/players/F/FloyLe00.htm
/players/F/FullKy00.htm
/players/A/AmukPr00.htm
/players/A/AmukPr00.htm
/players/C/ClinHa00.htm
/players/C/ClinHa00.htm
/players/J/JackEd01.htm
>>>