用Python获取沪深两市上市公司股票信息,提取创近10天股价新高的、停牌的、复牌不超过一天或者新发行的股票,并存入mysql数据库
#该脚本可以提取沪深两市上市公司股票信息,并按以下信息分类:(1)当天股价创近10个交易日新高的股票;(2)停牌的股票;(3)复牌不超过一个交易日或者新发行的股票
#将分类后的股票及其信息(股价新高、当前状态等)存入mysql数据库
from time import *
import pandas as pd
import tushare as ts
from datetime import date
import datetime
import MySQLdb
import sys
reload(sys)
sys.setdefaultencoding('utf8') #将编码方式默认改为utf-8
#-------------------------------定义函数:计算当天往前推Deltadays个交易日所对应的日期--------------------------
def com_StartDate(Deltadays):
i=0
da=date.today()
while i!=Deltadays:
da=da-datetime.timedelta(days=1)
if da.isoweekday()==6 or da.isoweekday()==7: #判断当前日期是否为周末(此处未考虑法定节假日,后续改进)
pass
else:
i+=1
return da.strftime("%Y-%m-%d") #返回值数据类型为string #--------------定义函数:判断某支股票处于什么状态,并返回股票代码、名字和股价(对于创新高的股票)等信息--------
def stock_info(stockID,startdate,index):
today=date.today()
df=ts.get_hist_data(stockID,start=startdate,end=today.strftime("%Y-%m-%d")) #获取股票信息
if type(df)!=type(None) and len(df.index)>1: #抓取时间周期内,有数据天数低于2天的,算作新股
df=df.reindex(index=index,method='ffill',fill_value=int(-1))
period_high=df['high'].max()
today_high=df.ix[today.strftime("%Y-%m-%d")]['high']
if today_high>=period_high and today_high>0 :
stock_status=int(0) #非新股,未停牌,股价创新高
return stock_status,df
elif today_high==int(-1):
stock_status=int(1) #非新股,但停牌
return stock_status,df
else:
stock_status=int(2) #非新股,未停牌,股价未创新高
return stock_status,df
else:
stock_status=int(3) #新股或复牌不超过1天的股票
return stock_status,df #-----------------------------------------------获取沪深两市所有 上市公司基本信息---------------------------
all_stocks_info=ts.get_stock_basics()
Deltadays=10
startdate=com_StartDate(Deltadays)
newRecStocksID=[] #股票价格创新高的股票代码列表
newRecStocksPrice=[] #创新高的股票价格列表
newRecStocksName=[] #股票价格创新高的股票名称列表
suspendedStocksID=[] #停牌股票代码列表
suspendedStocksName=[] #停牌股票名称列表
newORresumeStocksID=[] #新发行或者当天复牌的股票代码列表
newORresumeStocksName=[] #新发行或者当天复牌的股票名称列表
today=date.today()
index=ts.get_hist_data('',start=startdate,end=today.strftime("%Y-%m-%d"),retry_count=10,pause=1).index
for i in all_stocks_info.index:
stock_status,stockinfo=stock_info(str(i), startdate,index)
if stock_status==int(0): #当日股价创Deltadays天内新高的股票
newRecStocksID.append(str(i).zfill(6))
newRecStocksName.append(all_stocks_info.ix[str(i),'name'])
newRecStocksPrice.append(stockinfo.ix[today.strftime("%Y-%m-%d"),'high'])
elif stock_status==int(1): #已停牌的股票
suspendedStocksID.append(str(i).zfill(6))
suspendedStocksName.append(all_stocks_info.ix[str(i), 'name'])
elif stock_status==int(2): #未停牌,且股价未创Deltadays天内新高的股票
pass
else: #该股票为新发行或者复牌不超过一天的股票
newORresumeStocksID.append(str(i).zfill(6))
newORresumeStocksName.append(all_stocks_info.ix[str(i), 'name']) #-------------------------------------------数据写入DataFrame----------------------------------------------
newRecStocks=pd.DataFrame({'stockID':newRecStocksID,'stockname':newRecStocksName,'high_price':newRecStocksPrice,'status':['NewRecord']*len(newRecStocksID)})
suspendedStocks=pd.DataFrame({'stockID':suspendedStocksID,'stockname':suspendedStocksName,'status':['Suspended']*len(suspendedStocksID)})
newORresumeStocks=pd.DataFrame({'stockID':newORresumeStocksID,'stockname':newORresumeStocksName,'status':['New or Resume']*len(newORresumeStocksID)}) #-----------------------------------将数据存入MySQL数据库,数据库名称:stocks------------------------------
db=MySQLdb.connect('localhost','root','','stocks',charset='utf8')
pd.io.sql.to_sql(frame=newRecStocks,con=db,name=today.strftime("%Y%m%d")+'newRecordStocks',flavor='mysql',schema=None,if_exists='replace',index=True,index_label=None,chunksize=1000,dtype=None)
pd.io.sql.to_sql(frame=suspendedStocks,con=db,name=today.strftime("%Y%m%d")+'suspendedStocks',flavor='mysql',schema=None,if_exists='replace',index=True,index_label=None,chunksize=1000,dtype=None)
pd.io.sql.to_sql(frame=newORresumeStocks,con=db,name=today.strftime("%Y%m%d")+'newORresumeStocks',flavor='mysql',schema=None,if_exists='replace',index=True,index_label=None,chunksize=1000,dtype=None)
db.commit()
db.close()
用Python获取沪深两市上市公司股票信息,提取创近10天股价新高的、停牌的、复牌不超过一天或者新发行的股票,并存入mysql数据库的更多相关文章
- Python+Scrapy+Crawlspider 爬取数据且存入MySQL数据库
1.Scrapy使用流程 1-1.使用Terminal终端创建工程,输入指令:scrapy startproject ProName 1-2.进入工程目录:cd ProName 1-3.创建爬虫文件( ...
- python爬虫学习(2)__抓取糗百段子,与存入mysql数据库
import pymysql import requests from bs4 import BeautifulSoup#pymysql链接数据库 conn=pymysql.connect(host= ...
- python爬取疫情数据存入MySQL数据库
import requests from bs4 import BeautifulSoup import json import time from pymysql import * def mes( ...
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- python爬虫:爬取易迅网价格信息,并写入Mysql数据库
本程序涉及以下方面知识: 1.python链接mysql数据库:http://www.cnblogs.com/miranda-tang/p/5523431.html 2.爬取中文网站以及各种乱码处 ...
- Python爬虫教程-25-数据提取-BeautifulSoup4(三)
Python爬虫教程-25-数据提取-BeautifulSoup4(三) 本篇介绍 BeautifulSoup 中的 css 选择器 css 选择器 使用 soup.select 返回一个列表 通过标 ...
- Python爬虫教程-23-数据提取-BeautifulSoup4(一)
Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据,查看文档 https://www.crummy.com/software/BeautifulSoup/bs4/doc. ...
- Python 获取 exe 的 icon 并且保存
Python 获取 exe 的 icon 并且保存 参考链接:https://mail.python.org/pipermail/python-win32/2009-April/009078.html ...
- 使用shell/python获取hostname/fqdn释疑
一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...
随机推荐
- iOS 动画组
其实早在一个多月以前就已经实现了动作组播放的功能,不过当时感觉好像没有什么难度并没有放在心上,今天突然要用到动画组,发现已经忘记了,所以又将原来的代码翻出来看了下.最后决定还是写下来,以备不时之需.动 ...
- Asp.net有关访问页面权限的限制和错误页面配置
一.访问页面权限的限制 一个小项目,涉及到用户登录. 在用户没登录访问内容也时,对页面做一定限制,没登录的则不能访问,直接跳转到登录界面. /// <summary> /// 对没有登录用 ...
- 重写TextField Rect 改变显示位置
很简单很常用的一些东西,希望给需要的人帮助. 效果图如下: 自定义textField init() { super.init(frame: CGRect(x: , y: , width: yourWi ...
- el: 在jsp页面内使用函数判断子字符串
e.g. <c:forEach items="${datas}" var="data"> <c:if test="${not fn: ...
- 常见HTML的!DOCTYPE声明
HTML或者XHTML版本 !DOCTYPE声明 HTML 2.0 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> HTM ...
- 未找到导入的项目,请确认 <Import> 声明中的路径正确
当使用vs出现下列情况: D:\xxxx\Web\Web.csproj : error : 无法读取项目文件“Web.csproj”. D:\xxxx\WebServiceManager\Web\W ...
- ArcMap Add-in插件开发中解决VS调试时断点不会命中的问题
在VS2010中进行ArcMap Add-in插件开发(ArcEngine10.1,ArcGIS10.1),运行时为.NET4.0,在程序中设置了断点进行调试,但是运行后程序并不会在断点处停止,且原来 ...
- META-INF文件夹是干啥的,META-INF文件夹的作用, META-INF文件夹能删吗
今天有人问到 META-INF文件夹是干啥的,META-INF文件夹的作用, META-INF文件夹能删吗,还有项目的META-INF下面一般会有个MANIFEST.MF 文件,都是干啥的. 百度搜了 ...
- 利用dmidecode 查看服务器的信息技巧
Please refer to the link: http://www.laozuo.org/6682.html
- 总结js中数据类型的bool值及其比较
首先需要知道的是,js中有6个值为false,分别是: 0, '', null, undefined, NaN 和 false, 其他(包括{}, [], Infinity)为true. 可以使用Bo ...