2014-11-24 58 views
0

我試着用熊貓讀取ec2定價表格。基於documentation我期望DataFrames的列表,但得到一個表作爲列表。pandas.read_html只返回一個表格

代碼示例

import pandas 
link = 'http://aws.amazon.com/ec2/pricing/' 
data = pandas.read_html(link) 
print type(data) 
print data[0] 

輸出

<type 'list'> 
           0     1    2 
0 Reserved Instance Volume Discounts    NaN    NaN 
1   Total Reserved Instances Upfront Discount Hourly Discount 
2     Less than $250,000    0%    0% 
3    $250,000 to $2,000,000    5%    5% 
4   $2,000,000 to $5,000,000    10%    10% 
5    More than $5,000,000  Contact Us  Contact Us 

環境:

  • Ubuntu的14.10
  • 蟒蛇2.7.8
  • 大熊貓0.14.1
+0

什麼'類型(數據[0])'?你鏈接的文檔'read_html'將返回一個DataFrames列表,這就是你得到的:一個包含1個DataFrame的列表。通過檢查源代碼,它看起來像是唯一真正的HTML表(在tr URL中使用'tr','td')是預留實例卷折扣。 – wflynny 2014-11-24 20:55:29

回答

1

http://aws.amazon.com/ec2/pricing/使用JavaScript來填寫表中的數據。

不像你所看到的,當你在鏈接指向你的GUI瀏覽器,數據丟失,如果你使用的urllib2下載HTML:(然後搜索內容爲<table>標籤)

import urllib2 
response = urllib2.urlopen(link) 
content = resonse.read() 

要處理JavaScript,您需要使用Selenium, 或WebKit或Spidermonkey等自動瀏覽器引擎。

在這裏被使用溶液硒:

import selenium.webdriver as webdriver 
import contextlib 
import pandas as pd 
@contextlib.contextmanager 
def quitting(thing): 
    yield thing 
    thing.quit() 

with quitting(webdriver.Firefox()) as driver: 
    link = 'http://aws.amazon.com/ec2/pricing/' 
    driver.get(link) 
    content = driver.page_source 
    with open('/tmp/out.html', 'wb') as f: 
     f.write(content.encode('utf-8')) 
    data = pd.read_html(content) 
    print len(data) 

產生

238 
+0

感謝您指出JavaScript,但是我的代碼示例有問題。有一個錯誤的配置文件「 WebDriverException:消息:'無法加載配置文件。配置文件目錄:/ tmp/user/1001/tmpToFbg5」 – Wawrzek 2014-11-25 09:52:34

+0

這聽起來像[您的版本之間的不兼容](http:// stackoverflow.com/q/20957968/190597)Selenium和Firefox。 – unutbu 2014-11-25 12:57:26