AttributeError: Das Objekt „NoneType“ hat kein Attribut „Text“ und versucht, Daten aus fbref.com zu extrahierenPython

Python-Programme
Anonymous
 AttributeError: Das Objekt „NoneType“ hat kein Attribut „Text“ und versucht, Daten aus fbref.com zu extrahieren

Post by Anonymous »

Ich mache ein Projekt, bei dem ich einige Daten aus FBref entferne, und ich verwende einen Code, den ich auf Git gefunden habe und der genau das tut, was ich will. Dies ist der Code:

Code: Select all

def get_tables(url):
res = requests.get(url)
comm = re.compile("")
soup = BeautifulSoup(comm.sub("",res.text),'lxml')
all_tables = soup.findAll("tbody")
team_table = all_tables[0]
player_table = all_tables[1]
return player_table, team_table

def get_frame(features, player_table):
pre_df_player = dict()
features_wanted_player = features
rows_player = player_table.find_all('tr')
for row in rows_player:
if(row.find('th',{"scope":"row"}) != None):

for f in features_wanted_player:
cell = row.find("td",{"data-stat": f})
a = cell.text.strip().encode()
text=a.decode("utf-8")
if(text == ''):
text = '0'
if((f!='player')&(f!='nationality')&(f!='position')&(f!='squad')&(f!='age')&(f!='birth_year')):
text = float(text.replace(',',''))
if f in pre_df_player:
pre_df_player[f].append(text)
else:
pre_df_player[f] = [text]
df_player = pd.DataFrame.from_dict(pre_df_player)
return df_player

def frame_for_category(category,top,end,features):
url = (top + category + end)
player_table, team_table = get_tables(url)
df_player = get_frame(features, player_table)
return df_player

def get_outfield_data(top, end):
df1 = frame_for_category('stats',top,end,stats)
...
return df

df_2018 = get_outfield_data('https://fbref.com/en/comps/Big5/2017-2018/','/players/2017-2018-Big-5-European-Leagues-Stats')
df_2018["player"] = df_2018["player"] + ', 2017-18'
...
df.head()
Das Problem tritt in der Funktion „get_frame“ auf, wie Sie hier sehen können:

Code: Select all

Cell In\[19\], line 2
1 player_table, team_table = get_tables('https://fbref.com/en/comps/Big5/2017-2018/stats/players/2017-2018-Big-5-European-Leagues-Stats')
\----\> 2 df_player = get_frame(stats, player_table)
3 pintf(df_player)

Cell In\[18\], line 21, in get_frame(features, player_table)
19 for f in features_wanted_player:
20     cell = row.find("td",{"data-stat": f})
\---\> 21     a = cell.text.strip().encode()
22     text=a.decode("utf-8")
23     if(text == ''):

AttributeError: 'NoneType' object has no attribute 'text'
Ich glaube, es muss ein Teil der HTML-Daten sein, der im Prozess fehlerhaft ist, aber ich kann anscheinend nicht finden, was es ist.
Ich habe den Code fortgesetzt, aber Sie können ihn auf dieser Git-Seite finden: https://github.com/victorballesteros8/f ... /tree/main
Ich habe versucht, den Code in einer IDE zu verwenden und ihn zu debuggen, um herauszufinden, was das Problem verursacht hat, aber da so viele Daten gescrapt werden, ist es schwierig, ihn zu finden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post