沪深龙虎榜数据进一步处理,计算日后5日的涨跌幅

事前数据:

前面处理得到的csv文件

文件名前加入“[wait]”等待程序处理

python代码从雅虎股票历史数据api获取数据,计算后面5日的涨跌幅

雅虎数据api格式:

priceUrl = 'http://table.finance.yahoo.com/table.csv?s={%1}&d={%2}&e={%3}&f={%4}&g=d&a={%5}&b={%6}&c={%7}&ignore=.csv'
# %1:000001.sz
# END: %2:月-1 %3:日 %4:年
# STRAT: %5:月-1 %6:日 %7:年

事前数据截图:

计算后,再用excel的条件格式并另存为excel文件后截图:

代码:

  1. #coding=utf-8
  2.  
  3. #读取'[wait]'开头的csv文件
  4. #copyright @ WangXinsheng
  5. #http://www.cnblogs.com/wangxinsheng/
  6. import os
  7. import gzip
  8. import re
  9. import http.cookiejar
  10. import urllib.request
  11. import urllib.parse
  12. import time
  13. import datetime
  14.  
  15. def getOpener(head):
  16. # deal with the Cookies
  17. cj = http.cookiejar.CookieJar()
  18. pro = urllib.request.HTTPCookieProcessor(cj)
  19. opener = urllib.request.build_opener(pro)
  20. header = []
  21. for key, value in head.items():
  22. elem = (key, value)
  23. header.append(elem)
  24. opener.addheaders = header
  25. return opener
  26.  
  27. def ungzip(data):
  28. try: # 尝试解压
  29. print('正在解压.....')
  30. data = gzip.decompress(data)
  31. print('解压完毕!')
  32. except:
  33. print('未经压缩, 无需解压')
  34. return data
  35.  
  36. #常量
  37. header = {
  38. #'Connection': 'Keep-Alive',
  39. 'Accept': '*/*',
  40. 'Accept-Language': 'zh-CN,zh;q=0.8',
  41. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36',
  42. 'Accept-Encoding': 'gzip, deflate',
  43. 'Host': 'yahoo.com',
  44. 'Referer' : 'http://www.yahoo.com'
  45. }
  46. priceUrl = 'http://table.finance.yahoo.com/table.csv?\
  47. s={%1}&d={%2}&e={%3}\
  48. &f={%4}&g=d&a={%5}&b={%6}&c={%7}&ignore=.csv'
  49. # %1:000001.sz
  50. # END: %2:月-1 %3:日-1 %4:年
  51. # STRAT: %5:月-1 %6:日 %7:年
  52.  
  53. path=r'.'
  54. files = os.listdir(path)
  55. files.sort()
  56. out=[]
  57.  
  58. for f in files:
  59. if(f.startswith('[wait]') and
  60. f.endswith('.csv')):
  61. #读取文件
  62. print('读取文件:'+path+'/'+f)
  63.  
  64. f=open(path+'/'+f,'rt')
  65. infos = f.readlines()
  66. f.close()
  67.  
  68. i = 0
  69. add = False
  70. for info in infos:
  71. if(i==0):
  72. i=i+1
  73. info = info.replace('\n','')+',"一天后","二天后","三天后","四天后","五天后"\n'
  74. out.append(info)
  75. continue
  76. elif(len(info.split(','))>9):
  77. out.append(info)
  78. continue
  79. else:
  80. #确认需要取的数据范围
  81. tmp = info.split(',')
  82. try:
  83. timeArray = time.strptime(tmp[0], "%Y-%m-%d")
  84. except:
  85. timeArray = time.strptime(tmp[0], "%Y/%m/%d")
  86. timeStamp = int(time.mktime(timeArray))
  87. fromDay = datetime.datetime.utcfromtimestamp(timeStamp)
  88. fromDay = fromDay + datetime.timedelta(days = 1)
  89. endDay = fromDay + datetime.timedelta(days = 15)
  90. code = tmp[1].replace('"','').replace("'","")
  91. if(code.startswith('')):
  92. code = code +'.ss'
  93. else:
  94. code = code +'.sz'
  95. url = priceUrl.replace('{%1}',code).replace('{%2}',str(endDay.month-1))
  96. url = url.replace('{%3}',str(endDay.day)).replace('{%4}',str(endDay.year))
  97. url = url.replace('{%5}',str(fromDay.month-1)).replace('{%6}',str(fromDay.day))
  98. url = url.replace('{%7}',str(fromDay.year))
  99. print('抓取URL: '+url)
  100.  
  101. #通过雅虎获取价格
  102. dd = ''
  103. try:
  104. opener = getOpener(header)
  105. op = opener.open(url)
  106. data = op.read()
  107. data = ungzip(data)
  108. dd = data.decode()
  109. except:
  110. print('网络抓取失败')
  111. out.append(info)
  112. continue
  113. #计算涨跌幅百分比
  114. if(dd!=''):
  115. dataInfo = dd.split('\n')
  116. j=0
  117. dayCount = 0
  118. startPrice = 0
  119. for x in range(len(dataInfo)-1,0,-1):
  120. #处理数据
  121. if(dataInfo[x]==''):
  122. continue
  123. #print(dataInfo[x])
  124. if(dayCount>5):
  125. break
  126. di = dataInfo[x]
  127. if(dayCount==0):
  128. startPrice = float(di.split(',')[4])
  129. elif(int(di.split(',')[5])!=0):
  130. add = True
  131. closeP = float(di.split(',')[4])
  132. info = info.replace('\n','')+',"'+str(round((closeP-startPrice)/startPrice*100,2))+'%['+str(closeP)+']"'
  133. #print(info)
  134. if(dayCount==0 or int(di.split(',')[5])!=0):
  135. dayCount=dayCount+1
  136.  
  137. if(add):
  138. out.append(info+'\n')
  139. #print(out)
  140. continue
  141. #输出
  142. ff = open(path+'/'+f.name.replace('[wait]','[处理完了]'),'w')
  143. for o in out:
  144. ff.write(o)
  145. ff.close()
  146. print('处理完了\n文件地址:'+path+'/'+f.name.replace('[wait]','[处理完了]'))
  147. else:
  148. continue

[python]沪深龙虎榜数据进一步处理,计算日后5日的涨跌幅的更多相关文章

  1. [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上

    将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...

  2. [python]数据整理,将取得的众多的沪深龙虎榜数据整一整

    将昨日取得的众多的沪深龙虎榜数据整一整 提取文件夹内所有抓取下来的沪深龙虎榜数据,整理出沪深两市(含中小创)涨幅榜股票及前5大买入卖出资金净值,保存到csv文件 再手动使用数据透视表进行统计 原始数据 ...

  3. [python]初试页面抓取——抓取沪深股市交易龙虎榜数据

    [python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import ...

  4. python调用tushare获取沪深A股票资金流向数据

    接口:moneyflow 描述:获取沪深A股票资金流向数据,分析大单小单成交情况,用于判别资金动向 限量:单次最大提取4000行记录,总量不限制 积分:用户需要至少1500积分才可以调取,基础积分有流 ...

  5. python量化之路:获取历史某一时刻沪深上市公司股票代码及上市时间

    最近开始玩股票量化,由于想要做完整的股票回测,因此股票的上市和退市信息就必不可少.因为我们回测的时候必须要知道某一日期沪深股票的成分包含哪些对吧.所以我们要把沪深全部股票的上市时间.退市时间全部都爬下 ...

  6. python学习--大数据与科学计算第三方库简介

    大数据与科学计算  库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...

  7. python+tushare获取沪深港股通持股明细

    接口:hk_hold 描述:获取沪深港股通持股明细,数据来源港交所. 限量:单次最多提取3800条记录,可循环调取,总量不限制 积分:用户积120积分可调取试用,2000积分可正常使用,单位分钟有流控 ...

  8. 毕设之Python爬取天气数据及可视化分析

    写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...

  9. python爬取拉勾网数据并进行数据可视化

    爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示.直方图展示.词云展示等并根据可视化的数据做 ...

随机推荐

  1. SQLServer比较两条数据是否相同

    SQLServer比较两条数据是否相同 直接比较可能会一个一个字段的比较,也可以将多个字段拼成一个串然后比较,这里有个hash值比较的方法,很好用 用法 将需要的比较的column放进去,逗号隔开,只 ...

  2. SQL 数据库管理---公司培训

    一.实例 一个SQL的服务引擎就是一个SQL实例,每装一次SQL就会产生一次实例. 实例分为命名实例和默认实例,一台Windows服务器可以有多个SQL实例,但是只能有一个默认实例. 不同的实例之间相 ...

  3. js 根据屏幕大小调用不同的css文件

    原因:屏幕大小不一样,网站看起来总觉得怪怪的,所以,针对不同大小的屏幕,写了不同的css,写完了,要解决的问题就是:怎么根据屏幕的大小来引用不同的CSS,下面就是解决方法了. 解决方法:首先,在hea ...

  4. IOS开发之微信山寨版

    为了犒劳自己的学习内容,就山寨个微信的视图控制吧.拿着微信,仔细的看了一下,主要用到了TabBarController以及配置TabBarItem, NavigationController以及配置N ...

  5. Deffered.js的实现原理

    在艾伦的推荐下,看了一个日本人写的延时加载库,非常轻量,写的很棒.作为我的源码学习的第一编. 在认真看了两天之后,才看懂它的实现原理,我下面把通自己的理解,进行了精简.只程现原理,方便日后的回顾.&l ...

  6. C#开发微信公众平台-就这么简单(附Demo)

    写在前面 阅读目录: 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文.菜单事件响应) 示例Demo下载 后记 最近公司在做微信开发,其实就是接口开发,网上找了很多资料, ...

  7. 使用Spire.Doc来转换文本

    使用Spire.Doc来转换文本 前段时间,我为不熟悉这个产品的读者们写了一篇关于我对 Spire.Doc的初识印象.Spire.Doc是一个专业的Word .NET库,它是专门为开发人员设计的用来快 ...

  8. ubuntu /var/log/下文件介绍

    本文简单介绍ubuntu /var/log/下各个日志文件,方便出现错误的时候查询相应的log   /var/log/alternatives.log -更新替代信息都记录在这个文件中 /var/lo ...

  9. Angularjs CURD

    前言 基于一个手机端的项目使用了angularjs,硬着头皮去用,有很多的疑问还需要一一去验证,刚开始总是感觉找不到北,总是感觉有很多概念,而且似乎ng既夹杂MVC又夹杂MVVM的思想, 忙里偷闲敲了 ...

  10. Centos 7 开启端口

    CentOS 7 默认没有使用iptables,所以通过编辑iptables的配置文件来开启80端口是不可以的 CentOS 7 采用了 firewalld 防火墙 如要查询是否开启80端口则: 1 ...