通过BS4将Scraped Table加载到Pandas Dataframe中

时间:2016-12-12 12:01:12

标签: python pandas beautifulsoup

我试图从here

中获取任何基本盒子得分统计或高级盒子得分统计表格

我尝试过这样的事情:

url = "http://www.basketball-reference.com/boxscores/200112100LAC.html"
page = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'})
soup = BeautifulSoup(page.content, "html5lib")

table =  soup.find('div', class_='overthrow table_container').find('table',class_='sortable stats_table')
df = pd.read_html(table)
print df

然而,由于NoneType'对象错误。有没有更好的方法来获取表格代码并将其放入数据框?感谢。

3 个答案:

答案 0 :(得分:8)

您可以使用read_html从所有已解析的表中返回DataFrame的列表:

df = pd.read_html('http://www.basketball-reference.com/boxscores/200112100LAC.html')[0] # or [1], [2]
print (df)

答案 1 :(得分:2)

table是BeautifulSoup中的标记对象,您应该将其转换为字符串并将其传递给pandas

prettify()方法将Beautiful Soup解析树转换为格式良好的Unicode字符串,每个HTML / XML标记都有自己的 行:

df = pd.read_html(table.prettify())

答案 2 :(得分:0)

直接在pd.read_html()中传递汤,使用:

df = pd.read_html(driver.page_source)

这里的驱动程序是一个网络驱动程序(在我的情况下是Chrome)
在webdriver中打开的链接将传递给pdandas pd.read_html()