用Python获取沪深两市上市公司股票信息,提取创近10天股价新高的、停牌的、复牌不超过一天或者新发行的股票,并存入mysql数据库

 1 #该脚本可以提取沪深两市上市公司股票信息,并按以下信息分类:(1)当天股价创近10个交易日新高的股票;(2)停牌的股票;(3)复牌不超过一个交易日或者新发行的股票
 2 #将分类后的股票及其信息(股价新高、当前状态等)存入mysql数据库
 3 from time import *
 4 import pandas as pd
 5 import tushare as ts
 6 from datetime import date
 7 import datetime
 8 import MySQLdb
 9 import sys
10 reload(sys)
11 sys.setdefaultencoding(‘utf8‘)        #将编码方式默认改为utf-8
12 #-------------------------------定义函数:计算当天往前推Deltadays个交易日所对应的日期--------------------------
13 def com_StartDate(Deltadays):
14     i=0
15     da=date.today()
16     while i!=Deltadays:
17         da=da-datetime.timedelta(days=1)
18         if da.isoweekday()==6 or da.isoweekday()==7:   #判断当前日期是否为周末(此处未考虑法定节假日,后续改进)
19             pass
20         else:
21             i+=1
22     return da.strftime("%Y-%m-%d")   #返回值数据类型为string
23
24 #--------------定义函数:判断某支股票处于什么状态,并返回股票代码、名字和股价(对于创新高的股票)等信息--------
25 def stock_info(stockID,startdate,index):
26     today=date.today()
27     df=ts.get_hist_data(stockID,start=startdate,end=today.strftime("%Y-%m-%d")) #获取股票信息
28     if type(df)!=type(None) and len(df.index)>1:                       #抓取时间周期内,有数据天数低于2天的,算作新股
29         df=df.reindex(index=index,method=‘ffill‘,fill_value=int(-1))
30         period_high=df[‘high‘].max()
31         today_high=df.ix[today.strftime("%Y-%m-%d")][‘high‘]
32         if today_high>=period_high and today_high>0 :
33             stock_status=int(0)         #非新股,未停牌,股价创新高
34             return stock_status,df
35         elif today_high==int(-1):
36             stock_status=int(1)        #非新股,但停牌
37             return stock_status,df
38         else:
39             stock_status=int(2)       #非新股,未停牌,股价未创新高
40             return stock_status,df
41     else:
42         stock_status=int(3)           #新股或复牌不超过1天的股票
43         return stock_status,df
44
45 #-----------------------------------------------获取沪深两市所有 上市公司基本信息---------------------------
46 all_stocks_info=ts.get_stock_basics()
47 Deltadays=10
48 startdate=com_StartDate(Deltadays)
49 newRecStocksID=[]                    #股票价格创新高的股票代码列表
50 newRecStocksPrice=[]                 #创新高的股票价格列表
51 newRecStocksName=[]                  #股票价格创新高的股票名称列表
52 suspendedStocksID=[]                #停牌股票代码列表
53 suspendedStocksName=[]              #停牌股票名称列表
54 newORresumeStocksID=[]                      #新发行或者当天复牌的股票代码列表
55 newORresumeStocksName=[]                    #新发行或者当天复牌的股票名称列表
56 today=date.today()
57 index=ts.get_hist_data(‘002625‘,start=startdate,end=today.strftime("%Y-%m-%d"),retry_count=10,pause=1).index
58 for i in all_stocks_info.index:
59     stock_status,stockinfo=stock_info(str(i), startdate,index)
60     if  stock_status==int(0):                                #当日股价创Deltadays天内新高的股票
61         newRecStocksID.append(str(i).zfill(6))
62         newRecStocksName.append(all_stocks_info.ix[str(i),‘name‘])
63         newRecStocksPrice.append(stockinfo.ix[today.strftime("%Y-%m-%d"),‘high‘])
64     elif stock_status==int(1):                              #已停牌的股票
65         suspendedStocksID.append(str(i).zfill(6))
66         suspendedStocksName.append(all_stocks_info.ix[str(i), ‘name‘])
67     elif stock_status==int(2):                             #未停牌,且股价未创Deltadays天内新高的股票
68         pass
69     else:                                                  #该股票为新发行或者复牌不超过一天的股票
70         newORresumeStocksID.append(str(i).zfill(6))
71         newORresumeStocksName.append(all_stocks_info.ix[str(i), ‘name‘])
72
73 #-------------------------------------------数据写入DataFrame----------------------------------------------
74 newRecStocks=pd.DataFrame({‘stockID‘:newRecStocksID,‘stockname‘:newRecStocksName,‘high_price‘:newRecStocksPrice,‘status‘:[‘NewRecord‘]*len(newRecStocksID)})
75 suspendedStocks=pd.DataFrame({‘stockID‘:suspendedStocksID,‘stockname‘:suspendedStocksName,‘status‘:[‘Suspended‘]*len(suspendedStocksID)})
76 newORresumeStocks=pd.DataFrame({‘stockID‘:newORresumeStocksID,‘stockname‘:newORresumeStocksName,‘status‘:[‘New or Resume‘]*len(newORresumeStocksID)})
77
78 #-----------------------------------将数据存入MySQL数据库,数据库名称:stocks------------------------------
79 db=MySQLdb.connect(‘localhost‘,‘root‘,‘900417‘,‘stocks‘,charset=‘utf8‘)
80 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)
81 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)
82 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)
83 db.commit()
84 db.close()

  

				
时间: 2024-10-11 12:10:54

用Python获取沪深两市上市公司股票信息,提取创近10天股价新高的、停牌的、复牌不超过一天或者新发行的股票,并存入mysql数据库的相关文章

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

import pymysql import requests from bs4 import BeautifulSoup#pymysql链接数据库 conn=pymysql.connect(host='127.0.1',unix_socket='/tmp/mysql.sock',user='root',passwd='19950311',db='mysql') cur=conn.cursor() cur.execute("USE scraping") #存储段子标题,内容 def st

使用Python向MySQL数据库中存入json类型数据

0.说明 因为出于个人项目的需要,获取到的数据都是json类型的,并且都要存入MySQL数据库中,因为json类型数据不像一般的文本数据,所以在存入MySQL时需要注意的问题很多. 在网上找了很多方法,整理了一下比较实用可靠的,总结下来就是下面的过程: MySQL表中需要保证存储json数据的列类型为BLOB: 使用sql语句时,使用MySQLdb.excape_string函数来对json数据进行转义: 查询数据时,将结果使用json.loads就能够得到原来的Python数据类型: 下面就来

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

本程序涉及以下方面知识: 1.python链接mysql数据库:http://www.cnblogs.com/miranda-tang/p/5523431.html   2.爬取中文网站以及各种乱码处理:http://www.cnblogs.com/miranda-tang/p/5566358.html   3.BeautifulSoup使用 4.原网页数据信息不全用字典的方式,把不存在的字段设置为空 详细代码: #!/usr/bin/python # -*- encoding:utf-8 -*

Python网络编程小例子:使用python获取网站域名信息

Whois简介 whois(读作"Who is",非缩写)是用来查询域名的IP以及所有者等信息的传输协议.简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人.域名注册商).通过whois来实现对域名信息的查询.早期的whois查询多以命令列接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询.网页接口的查询工具仍然依赖whois协议向服务器发送查询请求,命令列接口的工具仍然被系统管理员广泛使用.whois通常

Python 获取网易云音乐热门评论

--> html { line-height: 1.6 } body { font-family: -apple-system-font, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; background-color: #f3f3f3; line-height: inherit } body.ric

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

Python爬虫教程-25-数据提取-BeautifulSoup4(三) 本篇介绍 BeautifulSoup 中的 css 选择器 css 选择器 使用 soup.select 返回一个列表 通过标签名称:soup.select("title") 通过类名:soup.select(".centent") id 查找:soup.select("#name_id") 组合查找:soup.select("div #input_content

python获取微信公共平台消息列表和用户头像

转载需注明原文地址:http://blog.csdn.net/btyh17mxy/article/details/25207889 刚写的模拟登陆的方式从获取微信公众平台消息列表和用户头像的库,之后还会继续增加相关功能,github地址https://github.com/btyh17mxy/wxwall #!/usr/bin/env python # coding: UTF-8 import json import hashlib import re import random import

使用python获取webservice数据并输出到文件

上头要求设置TCP备案检查,给了个WEBSERVICE接口.查了2天,才确认还是python比较好用,我这水平也就写个脚本把数据导出,过滤检索还是用的shell.写此文备忘.WEBSERVICE接口脚本如下: #! /usr/bin/python #coding:utf-8 import codecs import suds def main(file_name, out_file): url = 'http://121.14.4.210:8088/icpautobj/ws/getIcp?wsd

python 获取当前日期 星期

from datetime import datetime d =datetime.today()     #获取当前日期时间 d.isoweekday()           #获取时间周几 python 获取当前日期 星期,布布扣,bubuko.com