#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
>>>