用Python从新浪下载A股复权因子信息
最近在对日线进行分析回测时,需要用到股票的复权因子,因为TuShare的复权因子并没有提供公开调用API,这里考虑从Sina下载并解析。
主要参考了这篇文章:用Python从sina下载复权因子
新浪财经的复权因子数据例子,例如600000股票2017年第一季度复权因子在这里:http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHistory/stockid/600000.phtml?year=2017&jidu=1
print '\xc0\xfa\xca\xb7\xbd\xbb\xd2\xd7'.decode('GB2312') #将GB2312编码打印出汉字
import numpy as np
import pandas as pd
import tushare as ts
import datetime
import time
import tushare as ts
import os
import urllib2 #urllib2是Python的一个获取URLs的组件
import re #python的正则表达式模块#global variables
data_dir = 'D:\\python_study\\stock_hist_data\\' #下载数据的存放路径
sleep_time=2 #default 2s#找到特定str所在的那一行
def find_str(str_list, str):idx = -1row = 0for l in str_list: idx = l.find(str)if idx != -1:breakrow += 1return row#第二类解析
def deco_url2(url_list, str):s='\xc0\xfa\xca\xb7\xbd\xbb\xd2\xd7begin-->' #开始标志:历史交易begin-->e='\xc0\xfa\xca\xb7\xbd\xbb\xd2\xd7end-->' #结束标志:历史交易end-->s_idx = find_str(url_list, s)e_idx = find_str(url_list, e)factor=[]if e_idx - s_idx == 966-899: #这一行没看懂,返回空的因子listreturn factorelse:x='\xbc\xbe\xb6\xc8\xb8\xb4\xc8\xa8\xc0\xfa\xca\xb7\xbd\xbb\xd2\xd7' #查找'季度复权历史交易'x_idx=find_str(url_list,x)time_row=x_idx+17 #加17找到有日期的那一行, 这些加多少完全是根据网页源码显示的来手工数出来的,写的此时我也不知道更高级点的做法该怎么做factor_row=x_idx+26 #加26找到有因子的那一行delta = 14 #加14找到下一天因子行while factor_row <= e_idx-7:t = url_list[time_row][-14:-4]#print t, url_list[factor_row-1]f_re = re.search('\d+(\.\d*)?',url_list[factor_row])temp = t+','+f_re.group()+','+strfactor.append(temp.strip())time_row += deltafactor_row += deltareturn factor#第一类解析
def deco_url1(url_list, str):s='\xc0\xfa\xca\xb7\xbd\xbb\xd2\xd7begin-->'e='\xc0\xfa\xca\xb7\xbd\xbb\xd2\xd7end-->'s_idx = find_str(url_list, s)e_idx = find_str(url_list, e)factor=[]if e_idx - s_idx == 966-899:return factorelse:x='\xbc\xbe\xb6\xc8\xb8\xb4\xc8\xa8\xc0\xfa\xca\xb7\xbd\xbb\xd2\xd7'x_idx=find_str(url_list,x)time_row=x_idx+18factor_row=x_idx+26delta = 14while factor_row <= e_idx-7:if delta == 14:t = url_list[time_row-1][5:15]if delta == 11:t = url_list[time_row-1][6:16]#print t, url_list[factor_row-1]f_re = re.search('\d+(\.\d*)?',url_list[factor_row-1])if f_re == None:time_row -= 2factor_row -= 3delta = 11ti = url_list[time_row-1].find('2')t = url_list[time_row-1][ti:(10+ti)]#print url_list[factor_row-1]f_re = re.search('\d+(\.\d*)?',url_list[factor_row-1])temp = t+','+f_re.group()+','+strfactor.append(temp.strip())time_row += deltafactor_row += deltareturn factor
#获取感兴趣的所有股票信息,这里只获取沪深300股票
def get_all_stock_id():stock_info=ts.get_hs300s()return stock_info['code'].values#sample: get_former_right_factor('000001', 2017, '1')
def get_former_right_factor(sym, year, jidu):global sleep_time,data_dir l1="http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHistory/stockid/"l2=".phtml?year="l3="&jidu="str_year = str(year)file_path = data_dir + sym + '\\' + str(year) + '\\'file_name = str(year) + '_' + jidu + '_factor.txt'if not os.path.exists(file_path): os.makedirs(file_path) if not os.path.exists(file_path+file_name): link=l1 + sym + l2 + str(year) + l3 + jidutry:url_test = urllib2.urlopen(link)except IOError, msg: print str(msg).decode('UTF-8') sleep_time=min(sleep_time*2, 512)#每次下载失败后sleep_time翻倍,但是最大512s (新浪为防止恶意查询设置的封禁间隔为6min=360s) print 'Get factor data error: symbol: '+ sym + ', year: ' + str_year + ', jidu: ' + jidu + ', sleep time is: '+str(sleep_time) return True else: url_content = url_test.readlines()time = str(year)+jidu#if time >= '20062':# s = deco_url1(url_content,sym)#else:s = deco_url2(url_content,sym) #save to filesfobj= open(file_path + file_name, 'w')for ss in s:fobj.write(ss+'\n')fobj.close()sleep_time=max(sleep_time/2, 2) #每次成功下载后sleep_time变为一半,但是至少2s return Trueyears=range(2010,2017,1)
stocks=get_all_stock_id()
for stock in stocks:for year in years:for jd in ['4','3','2','1']: #一年四个季度get_former_right_factor(stock, year, jd)time.sleep(sleep_time)
用Python从新浪下载A股复权因子信息相关推荐
- python a股行情_使用Python下载A股行情的几种方法
使用Python下载A股行情的几种方法 1. tushare Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分 ...
- python新浪股票接口 2019_用python爬虫进行新浪腾讯股票数据采集
今天带给大家的是从新浪和腾讯爬取股票数据,主要是因为新浪和腾讯的股票数据存储在js中,不需要再重新解析网页源码方便很多. 今天我们要实现的股票爬取设计内容丰富,包括: 1.一个股票数据(沪深)爬虫和选 ...
- python利用tushare下载数据并计算当日收益率
python利用tushare下载数据并计算当日收益率 计算股票收益率的程序主要有以下几部分构成: 1.获取股票接口数据函数:pro_daily_stock() 2.计算收益率函数:cal_stock ...
- python怎么批量下载年报_Python+Wind 批量下载上市公司年报 - Part 1/2
Python+Wind 批量下载上市公司年报 - Part 1/2作者:张捷 目录1.背景介绍 2.安装Python 3.爬取万得上市公司年报3.1Wind下载公告信息 3.2获得年报地址 4.使用P ...
- python自动下载qq文件夹_GitHub - 1061700625/QQZone_AutoDownload_Album: Python+selenium 自动下载QQ空间相册...
QQZone_AutoDownload_Album Python+selenium 自动下载QQ空间相册 . selenium_firefox.zip 需要解压后放在同路径下 . 貌似腾讯的登陆加密做 ...
- Python系统的下载与安装教程
要使用 Python 语言进行程序开发,必须安装其开 发环境,即Python 解释器. 安装前先要从Python官网下载Python 系统文件, 下载地址为https://www.python ...
- python爬虫下载-python爬虫之下载文件的方式总结以及程序实例
python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...
- python编辑器安卓下载-Python的下载安装与Python编辑器的安装
在此特别鸣谢kamael,本文内容由kamael提供. 各位朋友大家好,我是章鱼(认识我的都喜欢这么叫我).今天我就来当当广大Python初学者的救星--交大家如何安装Python与编辑器以及编辑器的 ...
- python官网下载步骤64位-windows下载并安装Python的具体步骤
安装Python 下载并安装Python Python 的官网是 www.python.org,我们可以直接从官网下载 Python.这里介绍在微软Windows和苹果Mac OS两种系统中的安装方式 ...
最新文章
- Android UI 统一修改Button控件的样式,以及其它系统控件的默认样式
- OpenCV边缘检测专题
- Inserting/Removing shutters and filters
- 2、数据库需求分析阶段详解
- 讲义not have data_“熟记英语300句 中考英语无忧虑”讲练(089)讲义文本
- 6-12mysql库的操作
- wordpress mysql 密码重置_WordPress忘记密码找回登录密码的四种行之有效的方法
- javascript md5加密算法
- 【OSGI】Error osgi xx Invalid value for DynamicImport-Package dynamic.import.pack
- Spring-core-ClassUtils类
- SQL Server 合并复制遇到identity range check报错的解决
- linux中的strip命令简介------给文件脱衣服
- 浪潮服务器bios更改硬盘模式,bios更改硬盘模式详细教程
- 华人操作系统项目列表
- 重构改善既有代码的设计 --原则篇
- 如何查看MySQL的表空间
- 使用容联云Celery异步发送短信验证码
- Spark GraphX-航班飞行网图分析
- i3 10100和i5 10400的区别
- HR面试经验总结 | HR面试常问问题