使用python和urllib从Yahoo FInance获取数据

ng1*_*716 5 python urllib stock

我在 python 中使用 urllib 从雅虎财经获取股票价格。到目前为止,这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

所以我输入一个值,股票价格就出来了。但到目前为止我可以让它显示价格,只是一个空白的[]。我已经评论过我认为问题出在哪里。有什么建议么?谢谢。

sha*_*aan 4

您尚未转义正则表达式中的正斜杠。更改您的正则表达式:

<span id="yfs_l84_%s">(.+?)</span>
Run Code Online (Sandbox Code Playgroud)

<span id="yfs_l84_goog">(.+?)<\/span>
Run Code Online (Sandbox Code Playgroud)

假设您输入公司的列表代码作为代码的输入,这将解决您的问题。前任; 谷歌谷歌。

也就是说,对于您想要做的事情来说,正则表达式是一个糟糕的选择。正如其他人所建议的,探索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
Run Code Online (Sandbox Code Playgroud)