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

2024-06-07 23:29:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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

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


Tags: 代码nameimportrerawurllibpriceyahoo
3条回答

你的正则表达式没有逃过正斜杠。将regex更改为:

<span id="yfs_l84_%s">(.+?)</span>

<span id="yfs_l84_goog">(.+?)<\/span>

如果您输入公司的上市代码作为代码的输入,这将解决您的问题。谷歌的谷歌。

也就是说,regex是一个不好的选择,你想做什么。正如其他人所建议的,探索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

This guide将向您展示如何构建将返回csv的Yahoo财务查询。然后可以使用csv库轻松地解析它们。

如果您真的想尝试破解HTML,请使用BeautifulSoup。HTML不能用正则表达式轻松解析。

你为什么不能用熊猫?它对财务数据采集和时间序列分析有很好的支持。

http://pandas.pydata.org/pandas-docs/stable/remote_data.html

以下是直接从文档中获得的yahoo示例:

In [1]: import pandas.io.data as web
In [2]: import datetime
In [3]: start = datetime.datetime(2010, 1, 1)
In [4]: end = datetime.datetime(2013, 01, 27)
In [5]: f=web.DataReader("F", 'yahoo', start, end)
In [6]: f.ix['2010-01-04']
Out[6]: 
OnOpen               10.17
High               10.28
Low                10.05
Close              10.28
Volume       60855800.00
Adj Close           9.75
Name: 2010-01-04 00:00:00, dtype: float64

相关问题 更多 >

    热门问题