股票行情爬取

522次阅读
没有评论

对沪深A股的股票行情进行爬取,并保存在mongodb数据库中,最终通过查询数据库中的相关数据计算周行情数据。

1、爬取沪深A股目前的所有股票代码

具体行情以网易为主,但是需要按股票代码为以主来爬取相应行情,从东方财富爬取沪深A市场的所有股票代码。

在东方财富网站上进入行情中心,找到“http://quote.eastmoney.com/center/gridlist.html#hs_a_board”页面,可以看到沪深A股的所有股票的最新数据。在该网页下,进入开发者模式,通过“network”工具,可以发现在实际处理中,请求的url为

http://62.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407939967130801426_1628420280168&pn=’ + str(page + 1) +’&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1628420280169

一共有230页,通过循环,获取所有的股票代码。具体实现代码如下所示:

def get_stock_list():

code_id_list = [] for page in range(230): Url = ‘http://62.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407939967130801426_1628420280168&pn=’ + str(page + 1) +’&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1628420280169′ html = requests.get(Url) html = html.text

stock = re.findall(re.compile(‘\((.*)\)’),html) stock = stock[0] stock = eval(stock) data_stock = stock[‘data’] total_stock = data_stock[‘total’] diff_stock = data_stock[‘diff’]

for signal_stock in diff_stock: code_id = signal_stock[‘f12’]

code_id_list.append(code_id)

return code_id_list

2、依据股票代码爬取相应的股票行情

通过网易中心,来获取股票的最新行情,当然也可以通过东方财富等网站,本文是因为前期做的部分工作,所以才会采用网易的行情数据。

注意,沪深两地的连接略有区别,可以通过股票代码的第一位数字来区别。具体代码如下。

for code_id in code_id_list: print(‘正在获取%s股票数据…’ % code_id) if (code_id[0] == ‘6’ or code_id[0] == ‘9’): url = ‘http://quotes.money.163.com/service/chddata.html?code=0’ + code_id + \ ‘&start=19900101&end=now&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP’ print(url) else: url =’http://quotes.money.163.com/service/chddata.html?code=1′ + code_id + \ ‘&start=19900101&end=now&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP’ print(url) urllib.request.urlretrieve(url,’./’ + code_id + ‘.csv’) csvx_list = glob.glob(‘/virt/20210728/spider/stock/*.csv’)

上述代码中爬取的是从“start”到”end“期间的每天行情数据。

由于数据量比较大。所以将数据先保存到对应的csv文件中,然后再进行合并成一个文件。如下是合并的流程。

for i in csvx_list: fr = codecs.open(i, ‘r’).read() print(fr) with open(r’./merge.csv’, ‘a’) as f: # 合并csv文件 f.write(fr) print(‘写入完毕!’)

4、存储到mongodb数据库中

经过上述处理后,行情数据保存在merge文件中,下一步考虑将数据保存到mongo数据库中。

本文主要讲述mongodb数据库的基本使用,所以就不在此对安装与启动作过多的赘述。

4.1、首先数据库的创建

client = pymongo.MongoClient(‘localhost’,27017) #创建连接

db_stock = client[‘stock_info’] #创建名为 “stock_info” 的数据库

sheet_stock = db_stock[‘stock’] #在”weather”数据库中建表”stock”

上述代码实现了在本地创建一个名为’stock_info”的数据库,并且在该数据库中创建了一个名为“stock”的数据表。

4.2、数据库的存储

上面已经将数据存入了merge.csv文件中,所以现在要读取该文件,并且将该内容插入到“stock”数据标中。

marge_file_path = “./merge.csv”

stock_title = [‘日期’, ‘股票代码’, ‘名称’, ‘收盘价’, ‘最高价’, ‘最低价’, ‘开盘价’, ‘前收盘’, ‘涨跌额’, ‘涨跌幅’, ‘换手率’, ‘成交量’, ‘成交金额’, ‘总市值’, ‘流通市值’] with open(marge_file_path, ‘r’) as f: reader = csv.reader(f) print(type(reader))

for row in reader: #print(type(row)) code_info = row[1] if “‘” in code_info: code_id = code_info[1:] stock_info_row = row stock_info_row[1] = code_id stock_info = dict(zip(stock_title,stock_info_row)) print(stock_info) sheet_stock.insert_one(stock_info) else: stock_title = row

在上述代码中,实现了从“merge.csv‘文件中读取没行数据,并且结合每行数据的实际含义,成对存入数据表中的过程。

最后通过相关工具,数据在数据库中的展示如下。

股票行情爬取

 本文只是简单地讲述以下股票行情以及mongodb的写入操作,至于将针对这些行情数据进行更新以及周线等计算操作将在后续文章中描述。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-25发表,共计3263字。
新手QQ群:570568346,欢迎进群讨论 Python51学习