在 Python 中排序 table 数据时出现类型错误
TypeError when ordering table data in Python
我正在尝试使用 Python 2.7 从 Yahoo Finance 读取 table 数据,并让它为我提供所有数据的二维列表。到目前为止,这是我的代码:
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
我查看了其他答案,但我不确定它们是什么意思。
是否有更好的方法 return 所有 table 数据以某种 headers 的方式清晰可见?
如果没有,我该如何解决这个错误?我希望它给我这样的东西:
[["Strike", "28.00", "30.00", "30.50"...], ["Contract Name", "INTC150206C00028000"...], and_so_on]
您没有在此处定义列表的列表:
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"]]
我正在尝试使用 Python 2.7 从 Yahoo Finance 读取 table 数据,并让它为我提供所有数据的二维列表。到目前为止,这是我的代码:
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
我查看了其他答案,但我不确定它们是什么意思。
是否有更好的方法 return 所有 table 数据以某种 headers 的方式清晰可见?
如果没有,我该如何解决这个错误?我希望它给我这样的东西:
[["Strike", "28.00", "30.00", "30.50"...], ["Contract Name", "INTC150206C00028000"...], and_so_on]
您没有在此处定义列表的列表:
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"]]