2014-11-24 6 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 

환경 :

  • 우분투 14.10
  • 파이썬 2.7.8
  • 팬더 0.14.1
+0

를 산출한다 : 여기서

은 용액 셀레늄를 사용합니까? 링크 된 문서는'read_html'은 DataFrames의 목록을 반환 할 것이고 그게 당신이 가진 것입니다 : 하나의 DataFrame이 들어있는 목록입니다. 출처를 조사해 보면 URL에서 유일하게 진정한 HTML 테이블 ('tr','td' 사용)이 예약 인스턴스 볼륨 할인입니다. – wflynny

답변

1

http://aws.amazon.com/ec2/pricing/은 테이블의 데이터를 입력 자바 스크립트를 사용합니다. 이 링크에서 당신의 GUI의 브라우저를 할 때 urllib2를 사용하여 HTML을 다운로드 할 경우, 데이터가 누락 보는 것과 달리

: (. 그리고 <table> 태그 내용을 검색)

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

자바 스크립트를 처리하려면 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) 

'무슨 유형 (데이터 [0])에 대한'

238 
+0

JavaScript를 가리켜 주셔서 감사합니다. 그러나 코드 예제에 문제가 있습니다. 프로필에 문제가 있습니다. " WebDriverException : 메시지 : '프로필을로드 할 수 없습니다. 프로필 디렉토리 :/tmp/user/1001/tmpToFbg5" – Wawrzek

+0

[버전간에 호환되지 않습니다.] http : // stackoverflow.com/q/20957968/190597) 셀레늄과 파이어 폭스. – unutbu

관련 문제