2017-02-14 29 views
0

Я использую панду для анализа данных из следующей страницы: http://kenpom.com/index.php?y=2014Использования Панда для получения нескольких таблиц из веба-страницы

Чтобы получить данные, я пишу:

dfs = pd.read_html(url) 

Данные отлично выглядит и отлично разбирается, за исключением того, что он берет только данные из 40 первых строк. Кажется, это проблема с разделением таблиц, что делает так, что панды не получают всю информацию.

Как вы получаете панды, чтобы получить все данные из всех таблиц на этой веб-странице?

ответ

3

HTML-адрес страницы, которую вы опубликовали, имеет несколько <thead> и <tbody> теги, которые смешивают pandas.read_html.

После этого SO thread вы можете вручную unwrap эти теги:

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]) 

который возвращает 369.