2015-02-06 2 views
0

Я пытаюсь прочитать данные таблицы из Yahoo Finance с помощью Python 2.7 и дать мне двумерный список всех данных. Вот мой код до сих пор:TypeError при заказе данных таблицы в Python

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 

Я просмотрел другие ответы, но я не уверен, что они означают.

Есть ли лучший способ вернуть все данные таблицы четким способом с заголовками какого-то рода?

Если нет, то как я могу решить эту ошибку? Я хочу, чтобы дать мне что-то вроде этого:

[["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"]] 

Вы пытаетесь индекс первый список с ["Strike"][...], поэтому Python видит что первая часть представляет собой список и ожидает, что вторая часть пройдет в целое число, но вместо этого найдет строку.

Вы, кажется, забыли добавить запятые:

output = [["Strike"], ["Contract Name"], ["Last"], ["Bid"], ["Ask"], 
      ["Change"], ["\% Change"], ["Volume"], ["Open Interest"], 
      ["Implied Volatility"]] 
Смежные вопросы