Я пытаюсь извлечь данные из таблицы с веб-страницы, но продолжаю получать вышеуказанную ошибку. Я рассмотрел примеры на этом сайте, а также другие, но никто не имеет прямого отношения к моей проблеме. Пожалуйста, смотрите код ниже:AttributeError: объект ResultSet не имеет атрибута 'find_all' - pd.read_html
from bs4 import BeautifulSoup
import requests
import pandas as pd
url = 'http://www.espn.com/nhl/statistics/player/_/stat/points/sort/points/year/2015/seasontype/2'
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, "lxml")
table = soup.find_all('table', class_='dataframe')
rows = table.find_all('tr')[2:]
data = {
'RK' : [],
'PLAYER' : [],
'TEAM' : [],
'GP' : [],
'G' : [],
'A' : [],
'PTS' : [],
'+/-' : [],
'PIM' : [],
'PTS/G' : [],
'SOG' : [],
'PCT' : [],
'GWG' : [],
'G1' : [],
'A1' : [],
'G2' : [],
'A2' : []
}
for row in rows:
cols = row.find_all('td')
data['RK'].append(cols[0].get_text())
data['PLAYER'].append(cols[1].get_text())
data['TEAM'].append(cols[2].get_text())
data['GP'].append(cols[3].get_text())
data['G'].append(cols[4].get_text())
data['A'].append(cols[5].get_text())
data['PTS'].append(cols[6].get_text())
data['+/-'].append(cols[7].get_text())
data['PIM'].append(cols[8].get_text())
data['PTS/G'].append(cols[9].get_text())
data['SOG'].append(cols[10].get_text())
data['PCT'].append(cols[11].get_text())
data['GWG'].append(cols[12].get_text())
data['G1'].append(cols[13].get_text())
data['A1'].append(cols[14].get_text())
data['G2'].append(cols[15].get_text())
data['A2'].append(cols[16].get_text())
df = pd.DataFrame(data)
df.to_csv("NHL_Players_Stats.csv")
Я ликвидировала ошибку, видя, что ошибка обращения к таблице (т.е. Resultset) не имеющий метод find_all и получил код, выполняющийся закомментировав следующую строку:
#rows = table.find_all('tr')[2:]
и это изменить:
for row in rows:
Это, однако, не выделяет каких-либо данных с веб-страницы и просто создает CSV-файл с заголовками столбцов.
Я попытался извлечь некоторые данные непосредственно в строки, используя soup.find_all, но получить следующую ошибку;
data['GP'].append(cols[3].get_text())
IndexError: list index out of range
, которого я не смог решить.
Поэтому любая помощь будет очень признательна.
Кроме того, из любопытства, есть ли способы для достижения желаемого результата с помощью:
dataframe = pd.read_html('url')
потому, что я попробовал это также, но держать хранение:
FeatureNotFound: Couldn't find a tree builder with the features you
requested: html5lib. Do you need to install a parser library?
В идеале это метод, который я бы предпочел, но не могу найти примеры в Интернете.
Вы не смогли найти [html5lib] (https://pypi.python.org/pypi/html5lib)? Ну, вот я пойду :) – TemporalWolf
@TemporalWolf, да, похоже, это так. Но, похоже, это находит, когда я использую его с методом BeautifulSoup(). Какие-либо предложения? :) – aLoHa