我在 python 中使用 urllib 从 yahoo finance 获取股票价格。到目前为止,这是我的代码:
import urllib
import re
name = raw_input(">")
htmlfile = urllib.urlopen("http://finance.yahoo.com/q?s=%s" % name)
htmltext = htmlfile.read()
# The problemed area
regex = '<span id="yfs_l84_%s">(.+?)</span>' % name
pattern = re.compile(regex)
price = re.findall(pattern, htmltext)
print price
所以我输入一个值,股票价格就出来了。但到目前为止,我可以让它显示价格,只是一个空白 [ ]。我对我认为问题所在的地方发表了评论。有什么建议么?谢谢。
最佳答案
您没有转义正则表达式中的正斜杠。改变你的正则表达式:
<span id="yfs_l84_%s">(.+?)</span>
到
<span id="yfs_l84_goog">(.+?)<\/span>
假设您输入公司的上市代码作为您代码的输入,这将解决您的问题。前任; google 的 goog。
也就是说,正则表达式对于您要尝试做的事情来说是一个糟糕的选择。正如其他人所建议的那样,探索 BeautifulSoup这是一个用于从 HTML 中提取数据的 Python 库。使用 BeautifulSoup,您的代码可以像这样简单:
from bs4 import BeautifulSoup
import requests
name = raw_input('>')
url = 'http://finance.yahoo.com/q?s={}'.format(name)
r = requests.get(url)
soup = BeautifulSoup(r.text)
data = soup.find('span', attrs={'id':'yfs_l84_'.format(name)})
print data.text
关于python - 使用 python 和 urllib 从 Yahoo FInance 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23098757/