爬取股票历史数据并绘制K线图 | 您所在的位置:网站首页 › 怎么清除股票交易记录数据 › 爬取股票历史数据并绘制K线图 |
作者:简单的happy Python爱好者社区专栏作者博客专栏:简单的happy 有时候我们爬下股票数据后想在自己平台上显示K线图之类的。当然有时候嫌麻烦就直接截图了,可看图片毕竟不是很灵活,想看具体某天的无法显示,所以还是自己画比较好。今天看了pyecharts,感觉很不错。(https://github.com/pyecharts/pyecharts) 爬取某只股票的历史数据网易财经可以下载历史交易数据,以科大讯飞为例(http://quotes.money.163.com/trade/lsjysj_002230.html) 找到历史数据下载入口链接为: http://quotes.money.163.com/service/chddata.html?code=1002230&start=20080425&end=20180105&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP 多找几只股票历史数据下载链接后便能发现其规律: download_url = "http://quotes.money.163.com/service/chddata.html?code="+code+"&start="+start_date+"&end="+end_date+ "&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP"url中的参数code,start和end的值会变,其他参数值固定。 其中code的参数值为该股票所属沪市(0)或深市(1)的代码+股票代码, start参数为要下载的日期期间的开始值(默认为上市日), end参数为要下载的日期期间的截至值(默认为下载当天,即今日)。 这里我们暂时指定要爬的股票为深市,取上市日截至到今日的历史数据。 import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36' } def parse_url(url): response = requests.get(url,headers=headers) if response.status_code == 200: return etree.HTML(response.content) return False def get_date(response): # 得到股票代码,开始和结束的日期 start_date = ''.join(response.xpath('//input[@name="date_start_type"]/@value')[0].split('-')) end_date = ''.join(response.xpath('//input[@name="date_end_type"]/@value')[0].split('-')) code = response.xpath('//h1[@class="name"]/span/a/text()')[0] return code,start_date,end_date def download(code,start_date, end_date): download_url = "http://quotes.money.163.com/service/chddata.html?code=1"+code+"&start="+start_date+"&end="+end_date+\ "&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP" print(download_url) data = requests.get(download_url,headers=headers) f = open(code + '.csv', 'wb') for chunk in data.iter_content(chunk_size=10000): if chunk: f.write(chunk) print('股票---',code,'历史数据正在下载') url = 'http://quotes.money.163.com/trade/lsjysj_002230.html' response = parse_url(url) code,start_date,end_date = get_date(response) download(code,start_date, end_date)用pyecharts绘制K线图使用pandas读入下载好的数据,绘制K线图只需要日期,开盘价,收盘价,最高价和最低价,就只读入前7列即可。 import pandas as pd stock = pd.read_csv(code + '.csv',usecols=[0,1,2,3,4,5,6],encoding='gbk') stock.head()取最近180天的数据,并按日期从小到大排列 stock_new = stock.iloc[:180,:] stock_new_sorted = stock_new.sort_values('日期', ascending=True) stock_new_sorted.head()取日期为横坐标,绘制K线图 from pyecharts import Kline stock_code = stock_new_sorted['股票代码'][0] stock_name = stock_new_sorted['名称'][0] index = stock_new_sorted['日期'] v = [[o,close,lowest,highest] for o,close,lowest,highest in zip(stock_new_sorted['开盘价'],stock_new_sorted['收盘价'],stock_new_sorted['最低价'],stock_new_sorted['最高价'])] kline = Kline() kline.add(stock_name+'('+stock_code+')'+'日K线图', index, v,mark_point=["max"], is_datazoom_show=True) kline绘制收盘价的折线图 from pyecharts import Line line = Line(stock_name+'('+stock_code+')'+'收盘价日折线图') close = stock_new_sorted['收盘价'] line.add("收盘价日折线图", index, close,is_datazoom_show=True) line如要在同一张图上显示两个图,可用Overlap from pyecharts import Kline,Line,Overlap overlap = Overlap() overlap.add(kline) overlap.add(line) overlap同样的,也在绘制5日均线,10日均线等。 |
CopyRight 2018-2019 实验室设备网 版权所有 |