当前位置: 首页 > 面试题库 >

Python解析JavaScript生成的HTML表

公孙驰
2023-03-14
问题内容

我正在尝试将来自纽约证券交易所网站(http://www1.nyse.com/about/listed/IPO_Index.html)的表格抓取到熊猫数据框中。为了做到这一点,我有一个像这样的设置:

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生成的。在我的Web浏览器中使用开发人员工具时,我看到该表看起来与带有标签等的任何其他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解析器去寻找table标记时,它只能找到if条件,而下面没有合适的标记会指示内容。我怎么刮这张桌子?是否可以搜索标签而不是显示内容的表格?因为代码不是传统的html表形式,所以我如何用熊猫读入代码-
我必须手动解析数据吗?


问题答案:

在这种情况下,您需要一些东西来为您运行该javascript代码

一种选择是使用selenium

from pandas.io.html import read_html
from selenium import webdriver


driver = webdriver.Firefox()
driver.get('http://www1.nyse.com/about/listed/IPO_Index.html')

table = driver.find_element_by_xpath('//div[@class="sp5"]/table//table/..')
table_html = table.get_attribute('innerHTML')

df = read_html(table_html)[0]
print df

driver.close()

印刷品:

                                                    0        1          2   3
0                                                Name   Symbol        NaT NaN
1                       Performance Sports Group Ltd.      PSG 2014-06-20 NaN
2                           Century Communities, Inc.      CCS 2014-06-18 NaN
3                        Foresight Energy Partners LP     FELP 2014-06-18 NaN
...
79  EGShares TCW EM Long Term Investment Grade Bon...     LEMF 2014-01-08 NaN
80  EGShares TCW EM Short Term Investment Grade Bo...     SEMF 2014-01-08 NaN

[81 rows x 4 columns]


 类似资料:
  • 我对Java的html解析非常陌生,我以前使用JSoup来解析简单的html,而不需要动态改变它,但是现在我需要解析一个包含动态元素的网页。这是我之前试图解析网页的代码,但无法找到元素,因为它们是在页面加载后添加的。问题是,如果一个页面使用了带有标记的谷歌地图,我会尝试刮去这些标记的图像。

  • 问题内容: 我需要用python抓取网站。我使用urlib模块获取了源html代码,但是我还需要抓取由javascript函数(包含在html源代码中)生成的html代码。该功能在站点中的作用是,当您按下按钮时,它会输出一些html代码。如何使用python代码“按”此按钮?可以帮助我吗?我用firebug捕获了POST请求,但是当我尝试在url上传递它时,出现403错误。有什么建议么? 问题答案

  • 本文向大家介绍python解析html提取数据,并生成word文档实例解析,包括了python解析html提取数据,并生成word文档实例解析的使用技巧和注意事项,需要的朋友参考一下 简介 今天试着用ptyhon做了一个抓取网页内容,并生成word文档的功能,功能很简单,做一下记录以备以后用到。 生成word用到了第三方组件python-docx,所以先进行第三方组件的安装。由于windows下安

  • 问题内容: 我正在寻找一个易于实现的python html生成器。我找到了这个 但是无法为表添加CSS元素(ID,类)。 谢谢 问题答案: 如果您希望通过程序生成而不是模板生成,那么Karrigell的HTMLTags模块是一种可能。它可以通过大写其首字母的技巧(例如,引用我刚刚给出的doc URL)来包括例如属性(在Python中为保留字)。 与Python关键字(类,类型)同名的属性必须大写:

  • 本文向大家介绍python生成日历实例解析,包括了python生成日历实例解析的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了Python生成日历的实现方法。该实例可实现一个月的日历生成5x7的列表,列表里的没个日期为datetime类型,采用python自带的 calendar 模块实现。 程序运行结果如下: python代码如下: 希望本文所述实例对大家的Python程序设计有所帮助。

  • 问题内容: 在JavaScript中,是否可以从2D数组生成HTML表?编写HTML表的语法往往非常冗长,因此我想从2D JavaScript数组生成HTML表,如下所示: 会成为: 因此,我试图编写一个JavaScript函数,该函数将从2D JavaScript数组返回一个表,如下所示: 问题答案: 这是一个将使用dom而不是字符串连接的函数。