爬取股票历史数据并绘制K线图 您所在的位置:网站首页 怎么清除股票交易记录数据 爬取股票历史数据并绘制K线图

爬取股票历史数据并绘制K线图

2024-04-18 02:18| 来源: 网络整理| 查看: 265

作者:简单的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 实验室设备网 版权所有