2013-10-23 288 views
1

我正在从一个教程,从雅虎Fiances拉不同的股票价格。我有这个代码,它的工作原理是打印出不同股票代码的价格,然后是数组括号,但不是价格。所有帮助非常感谢。Python获取股票价格

import urllib 
import re 

symbolslist = ["aapl", "spy", "goog", "nflx"] 

i = 0 
while i < len(symbolslist): 
    url = "http://finance.yahoo.com/q?s=" + symbolslist[i] + "&ql=1" 
    htmlfile = urllib.urlopen(url) 
    htmltext = htmlfile.read() 
    regex = '<span id="yfs_l84_' + symbolslist[i] + ' "> (.+?) </span>' 
    pattern = re.compile(regex) 
    price = re.findall(pattern, htmltext) 
    print "the price of ", symbolslist[i], " is ", price 
    i += 1 
+1

有可能雅虎在编写代码后更改了他们的HTML。您是否仔细检查了它所寻找的跨度是否仍然存在? – redtuna

+2

为什么不使用for循环; symbolslist:'? –

+1

你的正则表达式有一个额外的空间e关闭'''在你的价格之前和之后 – cmd

回答

1

编辑:在第二个想法,你的正则表达式是不是在所有匹配的任何东西;请检查正则表达式是否正确。

编辑2:好吧,看起来你把空白放在不需要的地方(而不是放在它应该在的地方)。在将代码格式化时,请尽量保持整洁,以供自己使用,尤其是在向其他人展示时。正确的正则表达式是:

regex = '<span id="yfs_l84_' + symbolslist[i] + '">(.+?)</span>' 

除此之外...

最简单的解决将是改变这一

price = re.findall(pattern, htmltext) 

price = re.findall(pattern, htmltext)[0] 

因为re.findall返回列表,而不是单个项目,以及字符串表示法列表中的一个是[bla, bla, bla, ...]

Furhtermore,为了遍历一个序列的项目,不使用循环while用手动平衡和索引,这是不是汇编:

for symbol in symbols: 
    ... 
+0

谢谢Erik你是对的我的正则表达式写错了整个问题是我和'之间有一个空格。 – Codin

+0

@Codin:你真的需要写东西在一般 - 只看你最后的评论:不是一个单一的即使你的评论由3个句子组成,也不是最后一个标点符号。 –

-2

也许'之间的“空间>正在导致问题

+1

尝试和执行代码并不难,所以你可以给出肯定的答案并且不要maybes。 –