用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 ...
随机推荐
- Evolutionary Computing: 5. Evolutionary Strategies(2)
Resource: Introduction to Evolutionary Computing, A.E.Eliben Outline recombination parent selection ...
- Pyinstaller打包Selenium脚本为exe文件执行问题
由于同事辞职,许多运维工具的维护工作就交到我这里处理了,运维居然没人会Python脚本! 用Selenium编写的一个爬虫脚本cctv.py,需要给不懂软件的人运行.为了不让他去搭建,安装各种包,库, ...
- CI 3.0.6 控制器打印base_url 地址不为 localhost的解决方法
1.在application\config\autoload.php 第92行 加载url $autoload['helper'] = array('url'); 2.application\c ...
- 本地jsp连到服务器上的sqlserver
1.首先通过远程桌面连接到自己的服务器 方法很简答,打开远程桌面连接,然后输入服务器ip(外网ip),然后输入登录名和密码. 可以参考腾讯云给的教程:http://bbs.qcloud.com/for ...
- django中css问题
django中加载的css,js,图片其中js和图片可以加载出来,而css没有效果.原因如下: 这是因为你安装的某些IDE 或者其他更改了注册表导致的系统的注册表\HKEY_CLASSES_ROOT\ ...
- KMP算法解析(转自图灵社区)
KMP算法是一个很精妙的字符串算法,个人认为这个算法十分符合编程美学:十分简洁,而又极难理解.笔者算法学的很烂,所以接触到这个算法的时候也是一头雾水,去网上看各种帖子,发现写着各种KMP算法详解的转载 ...
- Oracle表空间,用户,用户授权
一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客“怎样玩转千万级 ...
- Apache多端口监听
打开:config/httpd.conf 找到Listen 80 在下面增加你要监听的端口,修改后如下: Listen 80 Listen 81 重启apache服务器
- 全端开发必备!10个最好的 Node.js MVC 框架
Node.js 是最流行的 JavaScript 服务端平台,它允许建立可扩展的 Web 应用程序.Node.js 包含不同类型的框架,如 MVC 框架.全栈框架.REST API 以及大量的服 ...
- JavaScript Array对象sort() 方法小结
sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...