【问题标题】:TypeError when ordering table data in Python在 Python 中排序表数据时出现 TypeError
【发布时间】:2015-04-06 21:09:40
【问题描述】:

我正在尝试使用 Python 2.7 从 Yahoo Finance 读取表数据,并让它为我提供所有数据的二维列表。到目前为止,这是我的代码:

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]

【问题讨论】:

    标签: python html python-2.7 xpath typeerror


    【解决方案1】:

    您没有在此处定义列表列表:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多