"Как исправить 'AttributeError: у объекта' NoneType 'нет ошибки атрибута' tbody 'в Python? - PullRequest
0 голосов
/ 06 июля 2019

Я ожидал, что файл csv создан в моей папке на рабочем столе.

запросы на импорт из bs4 импортировать BeautifulSoup импорт панд как pd

url = "https://basketball.realgm.com/ncaa/conferences/Big-12- 
Conference/3/Kansas/54/nba-players"

# get permission
response = requests.get(url)

# access html files
soup = BeautifulSoup(response.text, 'html.parser')

 # creating data frame
columns = ['Player', 'Position', 'Height', 'Weight', 'Draft Year', 'NBA 
Teams', 'Years', 'Games Played','Points Per Game', 'Rebounds Per Game', 
'Assists Per Game']

df = pd.DataFrame(columns=columns)

table = soup.find(name='table', attrs={'class': 'tablesaw','data- 
tablesaw-mode':'swipe','id': 'table-6615'}).tbody

trs = table.find('tr')

# rewording html

for tr in trs:
   tds = tr.find_all('td')
   row = [td.text.replace('\n', '')for td in tds]
   df = df.append(pd.Series(row, index=columns), ignore_index=True)


df.to_csv('kansas_player', index=False)

Я ожидал, что файл csv создан в моей папке на рабочем столе.

1 Ответ

0 голосов
/ 06 июля 2019

Похоже, что по вашему супу ..find (...) не может найти «таблицу», и это может быть причиной того, что вы получили тип None, вот мое изменение, и вы можете адаптировать его, чтобы справиться с вами csvпотребность в экспорте:

from bs4 import BeautifulSoup
import urllib.request

url = "https://basketball.realgm.com/ncaa/conferences/Big-12-Conference/3/Kansas/54/nba-players"

# get permission
response = urllib.request.urlopen(url)

# access html files
html = response.read()
soup = BeautifulSoup(html)
table = soup.find("table", {"class": "tablesaw"})

На этом этапе вы можете вернуть полное table содержимое как: enter image description here

С этого момента вы можете легко извлечьИнформация о строке таблицы, такая как:

for tr in table.findAll('tr'):
    tds = tr.find_all('td')
    row = [td.text.replace('\n', '')for td in tds]
    .....

Теперь каждая строка будет выглядеть следующим образом: enter image description here

Наконец, вы можете записать каждую строку в CSV с помощью илибез панд, тогда ваш звонок.

...