通过 BS4 将 Scraped Table 加载到 Pandas Dataframe 中
Posted
技术标签:
【中文标题】通过 BS4 将 Scraped Table 加载到 Pandas Dataframe 中【英文标题】:Load Scraped Table via BS4 into Pandas Dataframe 【发布时间】:2017-04-27 07:05:08 【问题描述】:我正在尝试从here 获取任何 Basic Box Score Stat 或 Advanced Box Score Stats 表
我试着做这样的事情:
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 对象错误,它不起作用。有没有更好的方法来获取表格代码并将其放入数据框中?谢谢。
【问题讨论】:
【参考方案1】:您可以使用 read_html
从所有已解析的表中返回 DataFrame
s 的列表:
df = pd.read_html('http://www.basketball-reference.com/boxscores/200112100LAC.html')[0] # or [1], [2]
print (df)
【讨论】:
【参考方案2】:table
是BeautifulSoup中的标签对象,你应该将其转换为字符串并传递给pandas
prettify()
方法会将 Beautiful Soup 解析树转换为格式良好的 Unicode 字符串,每个 HTML/XML 标记都有自己的
行:
df = pd.read_html(table.prettify())
【讨论】:
这给出了一个列表,但由于 OP 已经按类找到了正确的表,因此将其放入 df 中,如下所示:df = pd.read_html(table.prettify())[0]
【参考方案3】:
在 pd.read_html() 中直接传递汤:
df = pd.read_html(driver.page_source)
这里的驱动程序是一个网络驱动程序(在我的例子中是 chrome) 在 webdriver 中打开的链接将被传递给 pandas pd.read_html()
【讨论】:
以上是关于通过 BS4 将 Scraped Table 加载到 Pandas Dataframe 中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Scrapy获取stat(item_scraped_count)?
使用多进程池通过 Python 将_table_from_dataframe 加载到 BigQuery