Python错误'列表索引超出范围'使用分割功能时

时间:2016-08-01 00:21:05

标签: python python-2.7

我正在尝试使用urllib2从雅虎财务中提取信息,然后使用拆分功能显示净收入。当我在Python 2.7.12 shell中运行程序时,我必须打印命令" yahooNetIncome('')"单引号中的股票代码。每当我这样做时,它会出现错误"主循环列表索引中的失败超出范围"。我对python很新,所以我不完全理解这个问题。如果有人可以请求帮助,将不胜感激。

import time
import urllib2
from urllib2 import urlopen

stock = ['a', 'aa', 'aapl', 'abbv', 'abc', 'abt', 'ace', 'aci', 'acn', 'act', 'adbe', 'adi', 'adm', 'adp']

def yahooNetIncome(stock):
   try:
        sourceCode = urllib2.urlopen('https://finance.yahoo.com/quote/' + stock + '/financials').read()
        NI = sourceCode.split('<span data-reactid=".1vqhh4ora92.1.$0.0.0.3.1.$main-0-Quote-Proxy.$main-0-Quote.0.2.0.2:1:$INCOME_STATEMENT.0.0.$GROSS_PROFIT.1:$0.0.0">')[1].split('</span>')[0]
        print 'Net Income: ', NI
    except Exception, e:
        print 'failed in main loop', str(e)

2 个答案:

答案 0 :(得分:1)

你被一些事情所困扰。

您获得的超出范围的错误是由于列表中没有任何内容您尝试获取NI分配行中的第0个元素。该列表为空,因为split()调用失败,并且它失败了,因为从URL中提取的数据中不存在您输入的字符串。这是一个较小的问题。

当您可以使用浏览器检查器清楚地看到它时,您可能想知道为什么该字符串不在那里。在这里,您会被更大的问题所困扰:您下载的页面会动态地通过JavaScript更改其内容。如果您使用像Curl这样的工具将其直接转储到磁盘而不执行JavaScript,您将看到您正在搜索的字符串在文件中不存在。更糟糕的是,您尝试获取的字符串(您想要分配NI的数字)也不存在。 JavaScript必须在显示之前运行。在浏览器中,您将看到JavaScript运行后的实时显示。当您通过Python(或Curl或任何其他不像浏览器行为的工具并按照页面预期的方式运行JavaScript)拉入页面时,您将无法获得您正在寻找的数据。

很可能这是由网站所有者专门做的,以防止你想要做的事情。

答案 1 :(得分:0)

您的列表索引超出范围意味着您对split()方法的调用未找到任何要拆分的内容。因此,不会有索引1(没有拆分,只有一个索引),导致列表索引超出范围错误。