我很新編程Python。如何在python中創建股票報價提取應用程序
我想提出申請從google finance獲取股票價格。一個例子是CSCO (思科系統)。然後,我會使用該數據當股票達到某個值時警告用戶。它還需要每30秒更新一次。
問題是我沒有線索如何獲取數據!
任何人有任何想法?
我很新編程Python。如何在python中創建股票報價提取應用程序
我想提出申請從google finance獲取股票價格。一個例子是CSCO (思科系統)。然後,我會使用該數據當股票達到某個值時警告用戶。它還需要每30秒更新一次。
問題是我沒有線索如何獲取數據!
任何人有任何想法?
該模塊來自Corey Goldberg。
計劃:
import urllib
import re
def get_quote(symbol):
base_url = 'http://finance.google.com/finance?q='
content = urllib.urlopen(base_url + symbol).read()
m = re.search('id="ref_694653_l".*?>(.*?)<', content)
if m:
quote = m.group(1)
else:
quote = 'no quote available for: ' + symbol
return quote
用法示例:
import stockquote
print stockquote.get_quote('goog')
更新:改變了正則表達式匹配谷歌財經的最新格式(如23 - 2月 - 2011年)。這表明依靠屏幕抓取時的主要問題。
http://docs.python.org/library/urllib.html 用於獲取任意URL。
除此之外,您應該更好地看看一些提供JSON格式數據的Web服務。
否則你必須自己實現解析等。
抓拍yahoo.com獲取股票不太可能成功的正確道路。
您可以先看Google Finance APIs,儘管我沒有看到Python API或包裝。它看起來像直接訪問數據的唯一選擇是Java和JavaScript。如果您熟悉它並且它可在您的系統上使用,您也可以使用use cURL。
另一個開始的好地方是Google Finance自己的API:http://code.google.com/apis/finance/您可以查看他們的finance gadgets以獲取一些示例代碼。
以防萬一你想從雅虎拉數據...這是一個簡單的功能。這不會從常規頁面中刪除數據。我以爲我有一個鏈接到描述這個在評論中的頁面,但我現在沒有看到它 - 有一個魔術字符串附加到URL來請求特定的字段。
import urllib as u
import string
symbols = 'amd ibm gm kft'.split()
def get_data():
data = []
url = 'http://finance.yahoo.com/d/quotes.csv?s='
for s in symbols:
url += s+"+"
url = url[0:-1]
url += "&f=sb3b2l1l"
f = u.urlopen(url,proxies = {})
rows = f.readlines()
for r in rows:
values = [x for x in r.split(',')]
symbol = values[0][1:-1]
bid = string.atof(values[1])
ask = string.atof(values[2])
last = string.atof(values[3])
data.append([symbol,bid,ask,last,values[4]])
return data
在這裏,我發現,描述了神奇的字符串的鏈接: http://cliffngan.net/a/13
import urllib
import re
def get_quote(symbol):
base_url = 'http://finance.google.com/finance?q='
content = urllib.urlopen(base_url + symbol).read()
m = re.search('id="ref_(.*?)">(.*?)<', content)
if m:
quote = m.group(2)
else:
quote = 'no quote available for: ' + symbol
return quote
我發現,如果你使用的參考_和使用m.group(2)你會(*?)當參考ID從庫存變爲庫存時獲得更好的結果。
我建議使用的HTMLParser得到meta標籤的價值谷歌的地方,在它的HTML
<meta itemprop="name"
content="Cerner Corporation" />
<meta itemprop="url"
content="https://www.google.com/finance?cid=92421" />
<meta itemprop="imageUrl"
content="https://www.google.com/finance/chart?cht=g&q=NASDAQ:CERN&tkr=1&p=1d&enddatetime=2014-04-09T12:47:31Z" />
<meta itemprop="tickerSymbol"
content="CERN" />
<meta itemprop="exchange"
content="NASDAQ" />
<meta itemprop="exchangeTimezone"
content="America/New_York" />
<meta itemprop="price"
content="54.66" />
<meta itemprop="priceChange"
content="+0.36" />
<meta itemprop="priceChangePercent"
content="0.66" />
<meta itemprop="quoteTime"
content="2014-04-09T12:47:31Z" />
<meta itemprop="dataSource"
content="NASDAQ real-time data" />
<meta itemprop="dataSourceDisclaimerUrl"
content="//www.google.com/help/stock_disclaimer.html#realtime" />
<meta itemprop="priceCurrency"
content="USD" />
有了這樣的代碼:
import urllib
try:
from html.parser import HTMLParser
except:
from HTMLParser import HTMLParser
class QuoteData:
pass
class GoogleFinanceParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.quote = QuoteData()
self.quote.price = -1
def handle_starttag(self, tag, attrs):
if tag == "meta":
last_itemprop = ""
for attr, value in attrs:
if attr == "itemprop":
last_itemprop = value
if attr == "content" and last_itemprop == "name":
self.quote.name = value
if attr == "content" and last_itemprop == "price":
self.quote.price = value
if attr == "content" and last_itemprop == "priceCurrency":
self.quote.priceCurrency = value
if attr == "content" and last_itemprop == "priceChange":
self.quote.priceChange = value
if attr == "content" and last_itemprop == "priceChangePercent":
self.quote.priceChangePercent = value
if attr == "content" and last_itemprop == "quoteTime":
self.quote.quoteTime = value
if attr == "content" and last_itemprop == "exchange":
self.quote.exchange = value
if attr == "content" and last_itemprop == "exchangeTimezone":
self.quote.exchangeTimezone = value
def getquote(symbol):
url = "http://finance.google.com/finance?q=%s" % symbol
content = urllib.urlopen(url).read()
gfp = GoogleFinanceParser()
gfp.feed(content)
return gfp.quote;
quote = getquote('CSCO')
print quote.name, quote.price
至於現在(2015年),在谷歌財務API被棄用。但是你可以使用pypi模塊googlefinance。
安裝個GoogleFinance
$pip install googlefinance
這是很容易得到當前股價:
>>> from googlefinance import getQuotes
>>> import json
>>> print json.dumps(getQuotes('AAPL'), indent=2)
[
{
"Index": "NASDAQ",
"LastTradeWithCurrency": "129.09",
"LastTradeDateTime": "2015-03-02T16:04:29Z",
"LastTradePrice": "129.09",
"Yield": "1.46",
"LastTradeTime": "4:04PM EST",
"LastTradeDateTimeLong": "Mar 2, 4:04PM EST",
"Dividend": "0.47",
"StockSymbol": "AAPL",
"ID": "22144"
}
]
谷歌財經是提供實時股票數據的來源。雅虎還有其他API,例如yahoo-finance,但是對於紐約證券交易所和納斯達克股票,它們延遲了15分鐘。
只需複製粘貼此代碼。但輸出說`沒有報價可用於:goog`。 – Dharmit 2011-02-23 06:21:57
謝謝達爾米特。我暫時沒有使用過這段代碼,但你說得對 - Google財經有一個新的輸出格式。我更新了代碼,現在它應該可以工作。 – 2011-02-23 15:57:51
工程像魅力。感謝代碼。 :) – Dharmit 2011-02-24 05:04:21