風火プログラミング--pythonは単一株のリアルタイムデータと履歴データを取得します
3710 ワード
株式データの取得
これはもともと私の単一の株選択モデルにデータを提供するクラスであるため、パッケージされているのはモデルに必要なデータだけである.他のニーズがあれば、自分で拡張することができます.ポイントが多いのはファイルをダウンロードすることができて、ポイントがないのは直接下のコードをコピーするのは同じです.コードは複雑ではありません.見ればわかります.qqまたは微信(77245741)を加えて共同で検討することを歓迎します.
これはもともと私の単一の株選択モデルにデータを提供するクラスであるため、パッケージされているのはモデルに必要なデータだけである.他のニーズがあれば、自分で拡張することができます.ポイントが多いのはファイルをダウンロードすることができて、ポイントがないのは直接下のコードをコピーするのは同じです.コードは複雑ではありません.見ればわかります.qqまたは微信(77245741)を加えて共同で検討することを歓迎します.
# coding: utf-8
__author__ = " "
from datetime import datetime, date, timedelta
from lxml import etree
import requests
class Data():
"""
"""
__history_url = 'http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol={}&date={}'
__live_url = 'http://hq.sinajs.cn/list={}'
__headers = {'User-Agent': 'Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;'}
def __init__(self, stockCode, days=0):
"""
:param stockCode: sh600001/ sz000001
:param days: , 0,
"""
if __author__ == " ":
self.stockCode = stockCode
self.today = date.today()
self.day = self.today
self.days = days
self.get_ref_date()
self.__get_data()
def get_ref_date(self):
if self.days:
for i in range(self.days):
self.day = self.day - timedelta(days=1)
while True:
if self.__get_open():
break
else:
self.day = self.day - timedelta(days=1)
def __get_open(self):
url = self.__history_url.format(self.stockCode, date.strftime(self.day, "%Y-%m-%d"))
resp = requests.get(url, headers=self.__headers)
html = etree.HTML(resp.content)
open = float(html.xpath('.//td[text()=" :"]/following-sibling::td[1]//text()')[0])
return open
def __get_data(self):
"""
"""
if self.days:
url = self.__history_url.format(self.stockCode, self.day)
resp = requests.get(url, headers=self.__headers)
html = etree.HTML(resp.content)
self.open = float(html.xpath('//td[text()=" :"]/following-sibling::td[1]//text()')[0])
self.close = float(html.xpath('//td[text()=" :"]/following-sibling::td[1]//text()')[0])
self.high = float(html.xpath('//td[text()=" :"]/following-sibling::td[1]//text()')[0])
self.low = float(html.xpath('//td[text()=" :"]/following-sibling::td[1]//text()')[0])
self.amount = int(float(html.xpath('//td[text()=" ( ):"]/following-sibling::td[1]//text()')[0])/10)
else:
url = self.__live_url.format(self.stockCode)
resp = requests.get(url=url, headers=self.__headers)
data_list = resp.text.split(",")
self.open = float(data_list[1])
self.close = float(data_list[3])
self.high = float(data_list[4])
self.low = float(data_list[5])
self.amount = int(float(data_list[9])/10000)
@property
def fall(self):
"""
:return: / , boolean False/True
"""
return True if self.close < self.open else False
@property
def now(self):
"""
:return: h + m / 100, xx.xx
"""
t = datetime.now()
return t.hour + t.minute / 100
d = Data("sh601360") #
d1 = Data("sh601360", 1) # 1
d2 = Data("sh601360", 2) #
print(d2.open)