我想从纽约证券交易所网站(http://www1.nyse.com/about/listed/IPO_Index.html)中爬取一个表格并将其转换为Pandas数据框架。为此,我有如下设置:
def htmltodf(url):
page = requests.get(url)
soup = BeautifulSoup(page.text)
tables = soup.findAll('table')
test = pandas.io.html.read_html(str(tables))
return(test) #return dataframe type object
然而,当我在页面上运行时,列表中返回的所有表格都基本为空。进一步调查后,我发现该表格是由JavaScript生成的。使用网页浏览器的开发者工具时,我看到该表格看起来像任何其他带有标签等HTML表格。然而,在查看源代码时,出现了类似这样的内容:
<script language="JavaScript">
.
.
.
<script>
var year = [["ICC","21st Century Oncology Holdings, Inc.","22 May 2014","/about/listed/icc.html" ],
... more entries here ...
,["ZOES","Zoe's Kitchen, Inc.","11 Apr 2014","/about/listed/zoes.html" ]] ;
if(year.length != 0)
{
document.write ("<table width='619' border='0' cellspacing='0' cellpadding='0'><tr><td><span class='fontbold'>");
document.write ('2014' + " IPO Showcase");
document.write ("</span></td></tr></table>");
}
</script>
因此,当我的HTML解析器寻找表格标签时,它只能找到if条件,并没有适当的标签来指示内容。我该如何爬取这个表格?有没有一个标签可以替代表格来显示内容?因为代码不是以传统的HTML表格形式呈现的,所以我该如何使用pandas读取数据--我需要手动解析数据吗?