我正在制作一个教程,以便从雅虎飞信中提取不同的股票价格。我有这个代码有效,但打印出句子不同股票代码的价格,然后打印数组括号,但不打印价格。所有人都非常感谢。
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
答案 0 :(得分: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, ...]
。
Furhtermore ,为了循环一系列项目,不要使用带有手动计数器和索引的while
循环 - 这不是汇编程序:
for symbol in symbols:
...
答案 1 :(得分:-2)
'>&gt;之间的空格可能导致问题