python k线趋势识别_爬取股票历史数据并绘制K线图

引言

有时候我们爬下股票数据后想在自己平台上显示K线图之类的。当然有时候嫌麻烦就直接截图了,可看图片毕竟不是很灵活,想看具体某天的无法显示,所以还是自己画比较好。今天看了pyecharts,感觉很不错。(https://github.com/pyecharts/pyecharts)

爬取某只股票的历史数据

找到历史数据下载入口链接为:

多找几只股票历史数据下载链接后便能发现其规律: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

如要在同一张图上显示两个图,可用Overlapfrom pyecharts import Kline,Line,Overlap

overlap = Overlap()

overlap.add(kline)

overlap.add(line)

overlap

同样的,也在绘制5日均线,10日均线等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值