1

我正在编写一个教程,以从 Yahoo Fiances 中提取不同的股票价格。我有这段代码可以工作,但会打印出句子不同股票代码的价格,然后是数组括号而不是价格。非常感谢所有帮助。

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
4

2 回答 2

1

编辑:再想一想,您的正则表达式根本不匹配任何东西;请检查正则表达式是否正确开始。

EDIT2:好的,看起来你把空格放在不需要的地方(而不是放在应该放在的地方)。将来在格式化代码时,请尽量保持整洁,这既是为了您自己使用,尤其是在向其他人展示时。正确的正则表达式是:

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

除此之外...

最简单的解决方法是改变这个

price = re.findall(pattern, htmltext)

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

因为re.findall返回一个列表,而不是单个项目,并且列表的字符串表示形式是[bla, bla, bla, ...].

此外,为了循环一系列项目,不要使用while带有手动计数器和索引的循环——这不是汇编程序:

for symbol in symbols:
    ...
于 2013-10-23T21:18:45.017 回答
-2

也许“>”之间的空格导致了问题

于 2013-10-23T21:33:39.417 回答