python爬取上证股票的历史记录并画历史收盘图曲线

环境如下:
语言:python3.7
IDE: Pycharm-2020.1.1
包环境管理:anaconda 4.8.2
库文件:request, pandas, matplotlib, bs4, pandas_datareader
要连接互联网~~~~

问题:很多小伙伴想用机器学习方法对股票进行量化分析,我们面临的第一个问题是如何获得其历史数据?
如何解决上述问题?使用python爬虫爬取历史数据,或者更确切的说,先爬取股票代码,然后使用pandas_datareader从yahoo上获取该股票的历史数据。该网站可以获取到所有上证股票的股票代码。借鉴蒹葭杰克兄弟的代码,对其代码稍作改进,以方便使用。

  • 获取数据部分
import matplotlib.pyplot as plt
import pandas as pd
import pandas_datareader.data as web
import requests
import bs4 as bs

def get_stock_code():
    res = requests.get('https://www.banban.cn/gupiao/list_sh.html')
    res.encoding = res.apparent_encoding
    soup = bs.BeautifulSoup(res.text, 'lxml')
    content = soup.find('div', {'class':'u-postcontent cz'})
    result = []
    for item in content.findAll('a'):
        result.append(item.text)
    return result

def get_stock_history(stock_name, stock_code, save_dir):#当然你可以在参数里加上起始日期,start_date, end_date,在DataReader()里替换'2012-01-01'和'2020-05-08'
    if stock_code[-2:] != 'ss':
        stock_code = str(stock_code) + '.ss'
    df = web.DataReader(stock_code, data_source='yahoo', start='2012-01-01', end='2020-05-08')
    df.to_csv(save_dir + '/{}{}.csv'.format(stock_name, stock_code))

if __name__=='__main__':
	stock_name_code = get_stock_code()
	for i in stock_name_code:
		print(i)

输出结果如下图所示:
这是爬取到的一部分股票名称及代码
如果需要爬取其中一个股票的历史数据,我们可以利用get_stock_histroy()函数来获取。以包钢股份为例具体的代码如下:

if __name__=='__main__':
	get_stock_histroy('包钢股份', '600010', dir)#这里dir根据自己要存的地方改写,我使用的centos 8 操作系统,需要存在Desktop,这里dir就可以写成'/home/icedragonliu/Desktop'

输出结果如下图所示:
在这里插入图片描述
在这里插入图片描述
如果你想下载所有上证股票的数据,那就换下面的代码:

if __name__=='__main__':
	stock_name_code = get_stock_code()
	for i in stock_name_code:
		stock_name = i[:-8]
		stock_code = i[-7:-1]
		get_stock_history(stock_name, stock_code, '/home/icedragonliu/Desktop')

Starbucks的网不是很好,先下如下图所示:
在这里插入图片描述

  • 画出某个股票(以九鼎投资为例)历史收盘价曲线
    有了数据,我们需要先画出其历史数据来对数据有感性的认识,然后再对其进行分析。我也不知道为啥,kaggle里的大神都是先这样做。
def plot_stock_close_price(stock_price_path, fig_save_path):
    stock_df = pd.read_csv(stock_price_path)
    fig = plt.figure(figsize=(12, 8))
    stock = stock_history_path.split('/')[-1].split('.')[0][-6:]
    plt.title('{} Closed price'.format(stock))
    plt.plot(stock_df['Close'], color='blue')
    plt.xlabel('Date', fontsize=18)
    plt.ylabel('Close Price ($\yen$)')
    plt.savefig(fig_save_path + '/{}.png'.format(stock))
    plt.show()

if __name__=='__main__':
    stock_history_path = '/home/icedragonliu/Desktop/九鼎投资600053.ss.csv'
    fig_save_path = '/home/icedragonliu/Desktop/picture'
    plot_stock_close_price(stock_history_path, fig_save_path)

这样我们可以获取如下图片:

这个图片还是有些问题,下一篇在利用股票近60天的收盘价预测其后面一天的收盘价里进行改正。我在使用jupyter notebook时,日期是可以正常显示的。比如新华保险的这个如下图所示:
同样的方法,日期的显示结果有些不同,后面再研究一下
后面使用keras这个神经网络的库,对历史数据进行学习,训练出一个使用前60日的收盘价预测第二天收盘价的模型玩一玩。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值