#该脚本可以提取沪深两市上市公司股票信息,并按以下信息分类:(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. OpenCV 计算区域的内部参数

    对于一个区域,怎么进一步针对区域内部特征进行处理呢 ? 首先,我们要提取出来内部的某些特征才能说话,下面提取一些简单的特征,话不多说见代码: 1.平均数及方差参数: Mat tempMean, tem ...

  2. IntelliJ IDEA中Maven项目的默认JDK版本

    在IntelliJ IDEA 15中使用Maven时,IDEA将默认的编译版本.源码版本设置为jdk5.编译项目的时候出现警告:"Warning:Java: 源值1.5已过时, 将在未来所有 ...

  3. Numpy Study 2----* dot multiply区别

    使用numpy时,跟matlab不同: 1.* dot() multiply() 对于array来说,* 和 dot()运算不同 *是每个元素对应相乘 dot()是矩阵乘法 对于matrix来说,* ...

  4. Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理

    Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理 今天在使用spring4.1.4,使用ResponseBody注解返回JSON格式的数据的时候遇到406错误. 解决 ...

  5. Bug总结流程

    小明入职已有两年,期间测试能力已不知不觉成长许多,得到了Leader大熊的高度认可.回首这两年间,小明对"Bug总结流程"印象最为深刻,他对这个流程的认识在不断改变着:从最初的好奇 ...

  6. url的内容及格式

    url的内容及结构: url格式:

  7. 关于absolute 和 relative 定位的定义

    absolute的英文意思是绝对的意思,实际上是针对父级元素元素定位,如果父级元素没有position:relative|absolute,则追至再上一个父级元素,直至相对于文档的左上角定位,按照我们 ...

  8. 基础算法之冒泡排序Bubble Sort

    原理 将相邻的数据两两进行比较,按照从小到大或者从大到小的顺序进行位置交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后从头开始再次进行两两比较交换,直到倒数第二位时结束.按照此规则,若干 ...

  9. Delphi与Windows 7下的用户账户控制(UAC)机制 及 禁用兼容性助手

    WIN7, Vista提供的UAC机制,它的主要目的是防止对于操作系统本身的恶意修改.对于Delphi程序的影响,UAC主要在于以下几点:1.由于UAC机制,Delphi对于系统的操作可能无声的失败, ...

  10. python【0】-目录

    python[1]-基础知识 Python[2]-列表和元组 Python[3]-字典dic和集合set python[4]-函数 python[5]-生成式,生成器 python[6]-函数式编程 ...