#该脚本可以提取沪深两市上市公司股票信息,并按以下信息分类:(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. Evolutionary Computing: 5. Evolutionary Strategies(2)

    Resource: Introduction to Evolutionary Computing, A.E.Eliben Outline recombination parent selection ...

  2. Pyinstaller打包Selenium脚本为exe文件执行问题

    由于同事辞职,许多运维工具的维护工作就交到我这里处理了,运维居然没人会Python脚本! 用Selenium编写的一个爬虫脚本cctv.py,需要给不懂软件的人运行.为了不让他去搭建,安装各种包,库, ...

  3. CI 3.0.6 控制器打印base_url 地址不为 localhost的解决方法

    1.在application\config\autoload.php 第92行 加载url    $autoload['helper'] = array('url'); 2.application\c ...

  4. 本地jsp连到服务器上的sqlserver

    1.首先通过远程桌面连接到自己的服务器 方法很简答,打开远程桌面连接,然后输入服务器ip(外网ip),然后输入登录名和密码. 可以参考腾讯云给的教程:http://bbs.qcloud.com/for ...

  5. django中css问题

    django中加载的css,js,图片其中js和图片可以加载出来,而css没有效果.原因如下: 这是因为你安装的某些IDE 或者其他更改了注册表导致的系统的注册表\HKEY_CLASSES_ROOT\ ...

  6. KMP算法解析(转自图灵社区)

    KMP算法是一个很精妙的字符串算法,个人认为这个算法十分符合编程美学:十分简洁,而又极难理解.笔者算法学的很烂,所以接触到这个算法的时候也是一头雾水,去网上看各种帖子,发现写着各种KMP算法详解的转载 ...

  7. Oracle表空间,用户,用户授权

    一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客“怎样玩转千万级 ...

  8. Apache多端口监听

    打开:config/httpd.conf 找到Listen 80 在下面增加你要监听的端口,修改后如下: Listen 80 Listen 81 重启apache服务器

  9. 全端开发必备!10个最好的 Node.js MVC 框架

      Node.js 是最流行的 JavaScript 服务端平台,它允许建立可扩展的 Web 应用程序.Node.js 包含不同类型的框架,如 MVC 框架.全栈框架.REST API  以及大量的服 ...

  10. JavaScript Array对象sort() 方法小结

    sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...