admin 管理员组文章数量: 887018
今天带给大家的是从新浪和腾讯爬取股票数据,主要是因为新浪和腾讯的股票数据存储在js中,不需要再重新解析网页源码方便很多。
今天我们要实现的股票爬取设计内容丰富,包括:
1、一个股票数据(沪深)爬虫和选股策略测试框架,数据基于腾讯L和新浪财经。
2、爬取所有沪深两市股票的行情数据,可选择时分线、日k线、周K线、月K线、股票最新行情。
3、根据指定的选股策略和指定的日期进行选股测试。
4、计算选股测试实际结果(包括与沪深300指数比较)。
5、 保存数据到JSON文件、CSV文件。
6、支持使用表达式定义选股策略。
7、支持多线程处理。
使用环境python3.6
option.py
首先是参数定义部分option.py,这一部分用于控制代码的运行,主要包括,是否下载数据,是否进行测试,文件保存格式,文件的字符编码、测试的时间范围、抓起的时间起点、抓取的时间终点、股票数据保存路径、线程数目、选股策略文件路径(UTF8编码)、选股策略的数据库名称(不用数据库可以不用关心)、策略表达式(也可以将策略表达式放在文件中)
#coding:utf-8
#爬虫参数配置
import argparse
import datetime
#获取偏移指定天数的时间表达式
def get_date_str(offset):
if(offset is None):
offset = 0
date_str = (datetime.datetime.today() + datetime.timedelta(days=offset)).strftime("%Y%m%d")
return date_str
_default = dict(
reload_data = 'Y', # --reload {Y,N} 是否重新抓取股票数据,默认值:Y
gen_portfolio = 'Y', # --portfolio {Y,N} 是否生成选股测试结果,默认值:N
output_type = 'json', # --output {json,csv,all} 输出文件格式,默认值:json
charset = 'utf-8', # --charset {utf-8,gbk} 输出文件编码,默认值:utf-8
test_date_range = 60, # --testrange NUM 测试日期范围天数,默认值:50
start_date = get_date_str(-90), # --startdate yyyy-MM-dd 抓取数据的开始日期,默认值:当前系统日期-100天(例如2015-01-01)
end_date = get_date_str(None), # --enddate yyyy-MM-dd 抓取数据的结束日期,默认值:当前系统日期
target_date = get_date_str(None), # --targetdate yyyy-MM-dd 测试选股策略的目标日期,默认值:当前系统日期
store_path = 'stockholm_export', # --storepath PATH 输出文件路径,默认值:stockholm_export
thread = 10, # --thread NUM 线程数,默认值:10
testfile_path = './portfolio_test.txt',# --testfile PATH 选股策略文件路径,默认值:./portfolio_test.txt
db_name = 'stockholm', #选股策略数据库名称
methods = '' #选股策略表达式
)
parser = argparse.ArgumentParser(description='A stock crawler and portfolio testing framework.')
parser.add_argument('--reload', type=str, default=_default['reload_data'], dest='reload_data', help='Reload the stock data or not (Y/N), Default: %s' % _default['reload_data'])
parser.add_argument('--portfolio', type=str, default=_default['gen_portfolio'], dest='gen_portfolio', help='Generate the portfolio or not (Y/N), Default: %s' % _default['gen_portfolio'])
parser.add_argument('--output', type=str, default=_default['output_type'], dest='output_type', help='Data output type (json/csv/all), Default: %s' % _default['output_type'])
parser.add_argument('--charset', type=str, default=_default['charset'], dest='charset', help='Data output charset (utf-8/gbk), Default: %s' % _default['charset'])
parser.add_argument('--testrange', type=int, default=_default['test_date_range'], dest='test_date_range', help='Test date range(days): %s' % _default['test_date_range'])
parser.add_argument('--startdate', type=str, default=_default['start_date'], dest='start_date', help='Data loading start date, Default: %s' % _default['start_date'])
parser.add_argument('--enddate', type=str, default=_default['end_date'], dest='end_date', help='Data loading end date, Default: %s' % _default['end_date'])
parser.add_argument('--targetdate', type=str, default=_default['target_date'], dest='target_date', help='Portfolio generating target date, Default: %s' % _default['target_date'])
parser.add_argument('--storepath', type=str, default=_default['store_path'], dest='store_path', help='Data file store path, Default: %s' % _default['store_path'])
parser.add_argument('--thread', type=int, default=_default['thread'], dest='thread', help='Thread number, Default: %s' % _default['thread'])
parser.add_argument('--testfile', type=str, default=_default['testfile_path'], dest='testfile_path', help='Portfolio test file path, Default: %s' % _default['testfile_path'])
parser.add_argument('--dbname', type=str, default=_default['db_name'], dest='db_name', help='MongoDB DB name, Default: %s' % _default['db_name'])
parser.add_argument('--methods', type=str, default=_default['methods'], dest='methods', help='Target methods for back testing, Default: %s' % _default['methods'])
def main():
args = parser.parse_args()
print(args)
if __name__ == '__main__':
main()
股票数据爬取、测试,存储、读取等全部主要功能程序stockholm.py
#coding:utf-8
import requests
import json
import datetime
import timeit
import time
import io
import os
import csv
import re
from pymongo import MongoClient
from multiprocessing.dummy import Pool as ThreadPool
from functools import partial
class Stockholm(object):
def __init__(self, args):
## --reload {Y,N} 是否重新抓取股票数据,默认值:Y
self.reload_data = args.reload_data
## --portfolio {Y,N} 是否生成选股测试结果,默认值:N
self.gen_portfolio = args.gen_portfolio
## --output {json,csv,all} 输出文件格式,默认值:json
self.output_type = args.output_type
## --charset {utf-8,gbk} 输出文件编码,默认值:utf-8
self.charset = args.charset
## --testrange NUM 测试日期范围天数,默认值:50
self.test_date_range = args.test_date_range
## --startdate yyyy-MM-dd 抓取数据的开始日期,默认值:当前系统日期-100天(例如2015-01-01)
self.start_date = args.start_date
## --enddate yyyy-MM-dd 抓取数据的结束日期,默认值:当前系统日期
self.end_date = args.end_date
## --targetdate yyyy-MM-dd 测试选股策略的目标日期,默认值:当前系统日期
self.target_date = args.target_date
## --thread NUM 线程数,默认值:10
self.thread = args.thread
## --storepath PATH 输出文件路径,默认值
版权声明:本文标题:python新浪股票接口 2019_用python爬虫进行新浪腾讯股票数据采集 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726782024h1027835.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论