#该脚本可以提取沪深两市上市公司股票信息,并按以下信息分类:(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数据库的更多相关文章

  1. Python+Scrapy+Crawlspider 爬取数据且存入MySQL数据库

    1.Scrapy使用流程 1-1.使用Terminal终端创建工程,输入指令:scrapy startproject ProName 1-2.进入工程目录:cd ProName 1-3.创建爬虫文件( ...

  2. python爬虫学习(2)__抓取糗百段子,与存入mysql数据库

    import pymysql import requests from bs4 import BeautifulSoup#pymysql链接数据库 conn=pymysql.connect(host= ...

  3. python爬取疫情数据存入MySQL数据库

    import requests from bs4 import BeautifulSoup import json import time from pymysql import * def mes( ...

  4. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  5. python爬虫:爬取易迅网价格信息,并写入Mysql数据库

    本程序涉及以下方面知识: 1.python链接mysql数据库:http://www.cnblogs.com/miranda-tang/p/5523431.html   2.爬取中文网站以及各种乱码处 ...

  6. Python爬虫教程-25-数据提取-BeautifulSoup4(三)

    Python爬虫教程-25-数据提取-BeautifulSoup4(三) 本篇介绍 BeautifulSoup 中的 css 选择器 css 选择器 使用 soup.select 返回一个列表 通过标 ...

  7. Python爬虫教程-23-数据提取-BeautifulSoup4(一)

    Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据,查看文档 https://www.crummy.com/software/BeautifulSoup/bs4/doc. ...

  8. Python 获取 exe 的 icon 并且保存

    Python 获取 exe 的 icon 并且保存 参考链接:https://mail.python.org/pipermail/python-win32/2009-April/009078.html ...

  9. 使用shell/python获取hostname/fqdn释疑

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

随机推荐

  1. 理解tcp协议的3次握手和面向连接

    1.tcp是有连接的, 这个不是说他有个实际的连接,这个是个虚拟的连接,连接的保持信息不是由连接的路线来保存的,他是由连接的两方来保存其状态信息,这就是面向连接的, 2.tcp要3次握手: 客户端发给 ...

  2. navicat 快捷键

    1.ctrl+q           打开查询窗口 2.ctrl+/            注释sql语句 3.ctrl+shift +/  解除注释 4.ctrl+r           运行查询窗 ...

  3. python3 jason & pickle

    #Author by Andy#_*_ coding:utf-8 _*_import jsonimport pickledef sayhello(name): print('Hello %s' %na ...

  4. 前端MV*框架的意义

    经常有人质疑,在前端搞MV*有什么意义?也有人提出这样的疑问:以AngularJS,Knockout,BackBone为代表的MV*框架,它跟jQuery这样的框架有什么区别?我jQuery用得好好的 ...

  5. 关于紫光a5扫描仪的安装

    同事需要扫描写东西,从别的机器上搬来紫光a5的扫描仪,不会安装,需要帮忙. 插上扫描仪,win7提示发现新硬件,开始自动安装驱动.等了一会儿,提示无法安装,看来得手工寻找驱动来安装了.上网搜索a5的驱 ...

  6. sql server 维护计划与作业关系区别

    sql server 维护计划与作业关系区别 对于二者的区别,你可以把维护计划看作是针对数据库进行维护的作业模板.自定义作业具有更广泛的用途,当然,也具有更复杂的操作.所以,如果 仅仅是做个数据库优化 ...

  7. height和line-height有什么区别?

    <div style="height:120px;">是用来规定整个div的高度,文字还是默认会在顶端开始向下排列<div style="line-he ...

  8. WC项目

    #include <stdio.h> #include <string.h> int *getCharNum(char *filename, int *totalNum); i ...

  9. iOS开发常用代码块(2)

    GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispa ...

  10. kotlin 练习

    Kotlin 定义函数的一些语法 fun main(args:Array<String>):Unit { val x:() -> Unit = { println("hel ...