如何用爬蟲抓取股市數據並生成分析報表 ?

我想業餘造個輪子玩玩,實現這麼幾個功能:
1. 實時抓取當前指定股票的股市數據;
2. 自己設計一個簡易的交易模型,當股價變化到達某幾個閾值的時候觸發交易提示(比如郵件);
3. 數據可視化方面的處理;
.....等等.....
感覺理論上難度不是很大,就是要處理各種繁瑣的細節。想請問知友們,目前有準確實時免費的股市數據介面可以使用嗎?


準確, 實時和免費這三者之間只能同時滿足其中兩個啊....

如果要自己爬的話, 推薦使用http://finance.yahoo.com的api了. api很全, 支持csv導出.

您業餘想做的這個輪子, 其實市面上已經有很多產品了:
國內的:
https://app.wmcloud.com/
國外的:
Quandl - Find, Use and Share Numerical Data

恩...簡單試用了上面的兩個產品, 覺得造一個這種級別的輪子還是有一定難度的.

對了, 這兩款產品都收費了, 而且個人感覺對於我等韭菜來說還不是很便宜.


哈,這個股市輪子我也造過。

曾經,我一心想著憑藉這個破輪子馳騁股市,後來2015的股市....大家都懂的,於是把輪子扔掉了。

如今,房事如火,我造了一個「房源爬蟲和數據分析」,通過實時通知機制和大數據分析定位到熱門到最佳房源,現已經投資房產成功。

為了福利大眾,輪子還在繼續優化,可以上來提 issues :coolcooldee/housedb。放幾張示意圖:


我們曾經處理過國外某大型股票交易網站的數據, 以及機票查詢網站的數據,案例介紹寫到這裡了(http://www.tanmer.com/bigdata),關於你提出的這個需求,可以有以下幾個方面的建議:

1. 關於數據採集
股票數據是一種標準化的結構數據,是可以通過API介面訪問的(不過一般要通過渠道,開放的API有一定的局限性)。也可以通過爬蟲軟體進行採集,但是爬蟲軟體採集數據不能保證實時性,根據數據量和採集周期,可能要延遲幾十秒到幾分鐘不等。我們總結了一套專業的爬蟲技術解決方案(Ruby + Sidekiq)。能夠很快實現這個採集,也可以後台可視化調度任務。

2. 關於展現
網路股票數據的展現,網頁端直接通過HTML5技術就已經足夠,如果對界面要求高一點,可以採用集成前端框架,如Bootstrap;如果針對移動端開發, 可以使用Ionic框架。

3. 關於觸發事件
如果是採用Ruby on Rails的開發框架的話,倒是很方便了,有如sidekiq, whenever這樣子的Gem直接實現任務管理和事件觸發。


來自 麥子學院 joey 視頻的代碼,我自己加了個該個股記錄是否存在的判斷。
完全不懂的人可以用直接下載pycharm拷進去運行,、改倒數第五行到第三行的數據就行~會把股票數據轉存為excel到運行代碼的根目錄中,如下

代碼:

#-*- coding: UTF-8 -*-

import urllib
import datetime

def download_stock_data(stock_list):
for sid in stock_list:
url = "http://table.finance.yahoo.com/table.csv?s=" + sid

#偵測股票是否存在
s = urllib.urlopen(url)
code = s.getcode()
if code !=200:
print ("The %s "s record does not exist!" % (sid))
continue

fname = sid + ".csv"
print("downloading %s from %s" % (fname,url))
urllib.urlretrieve(url, fname)

def download_stock_data_period(stock_list,start,end):
#s為股票id
for sid in stock_list:
params = {"a": start.month - 1, "b": start.day, "c": start.year,
"d": end.month - 1, "e": end.day, "f": end.year, "s": sid}
url = "http://table.finance.yahoo.com/table.csv?"
qs = urllib.urlencode(params)
url = url + qs

# 偵測股票是否存在
s = urllib.urlopen(url)
code = s.getcode()
if code != 200:
print ("The %s"s record does not exist!" %(sid))
continue

fname = "%s_%d%d%d_%d%d%d.csv" % (sid,start.year,start.month,start.day,end.year,end.month,end.day)
print("downloading %s from %s" % (fname, url))
urllib.urlretrieve(url, fname)

if __name__ == "__main__":
stock_list = ["300001.sz", "300002.sz","600000.ss"]
end = datetime.date(year=2016,month=12,day=17)
start = datetime.date(year=2016,month=11,day=17)
download_stock_data_period(stock_list,start,end)
download_stock_data(stock_list)


如果想學習的話,建議使用php的curl+simplehtmldom
當然你要有足夠多的proxy來防止封你的ip
其實不僅財經網站,百度,google都可以爬。


網易財經,新浪和雅虎都有相應介面,返回json自己處理


各大網站都有,但是有延遲。


推薦閱讀:

一個人一生要在紅燈前停留多久?
演算法之路該如何學習?
你壓力最大的時候是什麼時候,怎麼度過的?
想從事數據分析工作,學什麼軟體或語言最好?
想做 Python 聊天機器人,有什麼好用的中文分詞、數據挖掘、AI方面的 Python 庫或者開源項目推薦?

TAG:數據挖掘 | 爬蟲計算機網路 | 數據抓取 |