2015-02-06 3 views
0

저는 Python 2.7로 Yahoo Finance에서 테이블 데이터를 읽고 모든 데이터의 2 차원 목록을 제공하려고합니다. 나는이 프로그램을 실행할 때 Python에서 테이블 데이터를 주문할 때 TypeError가 발생했습니다.

def getStocks(): 
    from lxml import html 
    import requests 

    page = requests.get("https://finance.yahoo.com/q/op?s=INTC+Options") 
    tree = html.fromstring(page.text) 

    output = [["Strike"]["Contract Name"]["Last"]["Bid"]["Ask"]["Change"]["\% Change"]["Volume"]["Open Interest"]["Implied Volatility"]] 
    for x in range(10): 
     colData = tree.xpath('//tr[@data-row-quote="_"]/td[{}]//*[text()]/text()'.format(x + 1)) 
     output[x].extend(colData) 

지금, 그것은 나에게이 오류 제공 : 여기 내 코드는 지금까지의

Traceback (most recent call last): 
    File "C:\Users\username\Python\stock_get.py", line 17, in <module> 
    getStocks() 
    File "C:\Users\username\Python\stock_get.py", line 8, in getStocks 
    output = [["Strike"]["Contract Name"]["Last"]["Bid"]["Ask"]["Change"]["\% Change"]["Volume"]["Open Interest"]["Implied Volatility"]] 
TypeError: list indices must be integers, not str 

내가 다른 답변을 통해 검토 한 결과,하지만 나는 그들이 무슨 뜻인지 모르겠어요.

일종의 헤더를 사용하여 모든 테이블 데이터를 읽기 쉬운 방식으로 반환하는 더 좋은 방법이 있습니까?

그렇지 않은 경우 어떻게해야이 오류를 해결할 수 있습니까? 파이썬은 볼 수 있도록

output = [["Strike"]["Contract Name"]["Last"]["Bid"]["Ask"]["Change"]["\% Change"]["Volume"]["Open Interest"]["Implied Volatility"]] 

당신은 ["Strike"][...]인덱스 첫 번째 목록에 노력하고있다 :

[["Strike", "28.00", "30.00", "30.50"...], ["Contract Name", "INTC150206C00028000"...], and_so_on] 

답변

2

현재 목록의 목록을 정의되지 않은 : 나는 그것이 나에게 이런 식으로 뭔가를주고 싶어 첫 번째 부분은 목록이고 두 번째 부분은 정수로 전달할 것으로 예상하지만 대신 문자열을 찾습니다.

output = [["Strike"], ["Contract Name"], ["Last"], ["Bid"], ["Ask"], 
      ["Change"], ["\% Change"], ["Volume"], ["Open Interest"], 
      ["Implied Volatility"]] 
:

당신은 쉼표를 추가 잊어 버린 표시

관련 문제