2017-02-14 1 views
0

J'utilise Pandas pour analyser les données de la page suivante: http://kenpom.com/index.php?y=2014Utilisez Pandas pour obtenir de tables multiples de la page Web

Pour obtenir les données, je vous écris:

dfs = pd.read_html(url) 

Les données ressemble beaucoup et est parfaitement analysé, sauf qu'il ne prend que les données des 40 premières lignes. Cela semble être un problème avec la séparation des tables, ce qui fait que les pandas n'obtiennent pas toute l'information.

Comment obtenez-vous les pandas pour obtenir toutes les données de toutes les tables sur cette page?

Répondre

3

Le code HTML de la page que vous avez publiée contient plusieurs balises <thead> et <tbody> qui confond pandas.read_html.

Après cette SO thread vous pouvez manuellement unwrap ces tags:

import urllib 
from bs4 import BeautifulSoup 

html_table = urllib.request.urlopen(url).read() 

# fix HTML 
soup = BeautifulSoup(html_table, "html.parser") 
# warn! id ratings-table is your page specific 
for table in soup.findChildren(attrs={'id': 'ratings-table'}): 
    for c in table.children: 
     if c.name in ['tbody', 'thead']: 
      c.unwrap() 

df = pd.read_html(str(soup), flavor="bs4") 
len(df[0]) 

qui retourne 369.