量化交易/基金爬虫(一)
先说说这个python脚本的初衷,就是为了给将来的量化交易----实现自动化亏钱做一个基石,打一下基础。
但是没想到的是,在写完这个脚本之后,仅仅两天时间,我全部的收益就被赔光。。。哭了。。。
import requests
from bs4 import BeautifulSoup
import re
import numpy as np
import matplotlib
import xlsxwriter# 处理乱码
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False#基金字典 这里是我们的基金代码已经名称
def my_data():datas = {'160222': '国泰国证食品饮料行业','160632': '鹏华酒','320007':'诺安成长混合','002472':'光大先进服务业混合','006113':'汇添富创新医药混合','161726':'招商国证生物医药指数','000742':'国泰新经济灵活配置混合','164906':'交银中证海外中国互联网指数','008888':'华夏国证半导体芯片ETF联接C','004997':'广发高端制造股票A','160630':'鹏华中证国防指数(LOF)','160225':'国泰国证新能源汽车指数','005827':'易方达蓝筹精选混合','260108':'景顺长城新兴成长混合','163417':'兴全合宜混合(LOF)A','003984':'嘉实新能源新材料股票A','519069':'汇添富价值精选混合A',}return datas#数据保存到execl
def save_excel(file_dir, data_list, sheet_name):workbook = xlsxwriter.Workbook(file_dir)for i in range(len(sheet_name)):worksheet = workbook.add_worksheet(sheet_name[i])bold = workbook.add_format({'bold': 1})headings = ['净值日期', '单位净值', '累计净值', '日增长率', '申购状态', '赎回状态', '分红送配']worksheet.write_row('A1', headings, bold)for h in range(len(data_list[i])):worksheet.write_row('A' + str(h + 2), data_list[i][h])chart_col = workbook.add_chart({'type': 'line'})# 配置第一个系列数据chart_col.add_series({# 如果新建sheet时设置了sheet名,这里就要设置成相应的值,如果没有的话,那就是Sheet1'name': '={}!$B$1'.format(sheet_name[i]),'categories': '={}!$A$2:$A${}'.format(sheet_name[i],len(data_list[i])),'values': '={}!$B$2:$B${}'.format(sheet_name[i],len(data_list[i])),'line': {'color': 'red'},})# 配置第二个系列数据chart_col.add_series({'name': '={}!$C$1'.format(sheet_name[i]),'categories': '={}!$A$2:$A${}'.format(sheet_name[i],len(data_list[i])+1), #展示名字'values': '={}!$C$2:$C${}'.format(sheet_name[i],len(data_list[i])+1), #展示数据'line': {'color': 'yellow'},})# 设置图表的title 和 x,y轴信息chart_col.set_title({'name': '基金走势'})chart_col.set_x_axis({'name': '时间'})chart_col.set_y_axis({'name': '价值'})# 设置图表的风格chart_col.set_style(1)# 把图表插入到worksheet并设置偏移worksheet.insert_chart('A2', chart_col, {'x_offset': 500, 'y_offset': 1})workbook.close()#页面解析
def get_html(code, start_date, end_date, page=1, per=20):url = 'http://fund.eastmoney.com/f10/F10DataApi.aspx?type=lsjz&code={0}&page={1}&sdate={2}&edate={3}&per={4}'.format(code, page, start_date, end_date, per)rsp = requests.get(url)html = rsp.textreturn html#获取数据
def get_fund(code, start_date, end_date, page=1, per=20):# 获取htmlhtml = get_html(code, start_date, end_date, page, per)soup = BeautifulSoup(html, 'html.parser')# 获取总页数pattern = re.compile('pages:(.*),')result = re.search(pattern, html).group(1)total_page = int(result)# 获取表头信息heads = []for head in soup.findAll("th"):heads.append(head.contents[0])# 数据存取列表records = []# 获取每一页的数据current_page = 1while current_page <= total_page:html = get_html(code, start_date, end_date, current_page, per)soup = BeautifulSoup(html, 'html.parser')# 获取数据for row in soup.findAll("tbody")[0].findAll("tr"):row_records = []for record in row.findAll('td'):val = record.contents# 处理空值if val == []:row_records.append(np.nan)else:row_records.append(val[0])# 记录数据records.append(row_records)# 下一页current_page = current_page + 1return records#次程序
def collect(start_time,end_time):datas = []names = []data = my_data()for i in data:fund_code = iname = data[i]names.append(name)print(fund_code, name)fund_df = get_fund(fund_code, start_date=start_time, end_date=end_time)for i in fund_df: #为了方便制图,写入到execl表内时,数字转换成浮点型i[1] = float(i[1])i[2] = float(i[2])i[6] = str(i[6]) #存入到execl表前,要转换成strdatas.append(fund_df)return datas,namesif __name__ == '__main__':datas,names = collect('2020-10-13','2021-01-13') #这里是获取基金数据的时间save_excel('01-14.xlsx', datas, names) #名称
脚本运行完之后的效果(图表会在execl中自动生成)

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
