网易首页 > 网易号 > 正文 申请入驻

股票数据爬虫进阶:免费、开源的股票爬虫Python库,亲测真香

0
分享至

想要获取本期文中的完整代码,欢迎添加技术宅个人微信号:sljsz01,sljsz05。已加入知识星球会员也可直接在知识星球内获取本文源码。(知识星球优惠链接请见文末)

01

免费开源的股票开源爬虫Python库:Easyquotation

我们在此前的文章中,向大家分享了如何用Python爬虫,从新浪财经获取实时的股票数据:。本期文章,我们将介绍一个股票数据爬虫的进阶工具:一个叫做Easyquotation的Python三方库,这个py三方库内置了爬取多个不同的股票数据源的功能,数据源包括:

  1. 新浪财经:全部A股实时行情(snapshot)

  2. 集思录:分级基金、ETF、QDII实时数据

  3. 腾讯财经:A股日内分时行情、港股日k线行情、港股实时行情(snapshot)

新浪财经的实时行情,我们不再赘述。对于集思录,这是一个提供侧重债息相关的投资品种,例如新股、可转债、分级基金、债券、封闭基金、QDII、ETF、LOF 等资产标的数据的专业平台,投资者可以通过集思录数据,分析理论价值及其偏差,找到各种低风险的套利机会,而Easyquotation支持我们从集思录上爬取其公布的数据,进而可以使用Python跟踪套利机会。对于腾讯财经,它不仅提供A股的日内行情,还提供港股的日K线数据以及实时行情数据,对于有港股交易需求的朋友来说,爬取腾讯财经的免费港股数据,不失为一个经济的方案。

02

使用准备

接下来,我们介绍在使用Easyquotation前,需要做的准备工作,大致可以分为两步:

首先,我们需要安装Requests三方库。Requests库可以说是所有爬虫的”标配“,Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。与urllib相比,Requests更加方便,可以节约我们大量的工作。由于easyquotation的爬虫依赖Requests库,所以我们必须先确保电脑中安装好Requests库。

第二步,安装Easyquotation。Easyquotation有两种安装方式,我们既可以通过pip install的方式进行一键安装,也可也从github上clone对应的库文件,进行手工安装。安装完Easyquotation库,我们就可以开始使用它了。

03

简要介绍

在实测代码使用Easyquotation之前,我们先对其主体逻辑,做一个简单介绍:

首先,Easyquotation的Api提供了一个入口,允许我们在使用时,选择爬取哪个数据源,Easyquotation支持的数据源包括:新浪、集思录、腾讯以及中国银行(汇率),中国银行的数据源主要为了读取美元人民币等主流外汇的汇率,我们平时用的比较少,所以文章重点介绍前3个爬虫数据源的使用:新浪财经、集思录、腾讯财经。

其次,Easyquotation有一个名为Basequotation基类,这个基类大家不需要特别理解它的技术细节,只需要知道它的总体功能,包括两方面:一是定义爬虫获取数据的基础函数,二是创建查询线程池。

最后,是各个扩展子类,子类有三大功能:继承基类函数、重载自定义行情源、接收数据的处理函数。而我们后续要做的实测,就是将子类进行实例化。比如我们用新浪财经的爬虫数据,就是实例化Sina的子类,而如果我们用集思录的爬虫数据,就是实例化jsl的子类,其他子类,皆可以此类推。

04

实测:新浪财经爬虫

示例1:新浪财经爬取全市场股票实时数据(snapshot)。Easyquotation中有一个好用的方法market_snapshot,可以用一个函数爬取到沪深两市所有股票的实时数据(snapshot)。


import easyquotationquotation = easyquotation.use('sina')Res_Sina_AllSnap = quotation.market_snapshot(prefix=True)

示例2:获取交易所上市ETF的实时Ticker数据,调用real方法,我们以513050中概互联为例,获取到该ETF相应的Ticker,具体字段参见运行结果截图。


Res_Sina_stock = quotation.real('513050')

示例3:获取个股实时Ticker数据,调用stocks方法,该方法支持同时获取多个个股,采用逗号分隔的形式,例如我们同时获取600519、601888的实时Ticker数据,返回的字段与ETF的Ticker数据字段相同。


Res_Sina_stocks = quotation.stocks(['600519', '601888'])

示例4:获取交易所指数的实时Ticker数据,同样调用stocks方法,同样支持同时获取多个指数,仍采用逗号分隔的形式,我们这里实时获取sh000001上证指数、sz000001深圳综指的Ticker数据。需要注意的是,由于指数不存在盘口,所以此时返回的bid、ask数据都为0。


Res_Sina_index = quotation.stocks(['sh000001', 'sz000001'], prefix=True)

05

实测:集思录爬虫

我们再继续测试集思录的爬虫,我们通过jsl子类的实例化,并依次调用funda、fundb、qdii、etfindex,分别获取到集思录整理的分级A、分级B、QDII以及ETF的数据。再将这些数据转换为标准的DataFrame格式,方便我们查看数据字段与数据内容。实现代码、数据字段如下:


quotation = easyquotation.use('jsl')Res_Jsl_fja = quotation.funda()Res_Jsl_fjb = quotation.fundb()Res_Jsl_qd = quotation.qdii()Res_Jsl_etf = quotation.etfindex()df_Jsl_fja = pd.DataFrame.from_dict(Res_Jsl_fja, orient='index')df_Jsl_fjb = pd.DataFrame.from_dict(Res_Jsl_fjb, orient='index')df_Jsl_qd = pd.DataFrame.from_dict(Res_Jsl_qd, orient='index')df_Jsl_etf = pd.DataFrame.from_dict(Res_Jsl_etf, orient='index')

分级A数据字段

分级B数据字段

ETF数据字段

QDII数据字段

06

实测:腾讯财经爬虫

腾讯财经爬虫是三个股票数据爬虫中,功能最强大的。腾讯财经能够获取到新浪财经所没有的A股日内分时数据、港股日线数据、以及港股日内数据。

示例1:A股日内分时图

我们通过腾讯财经,可以获取到A股个股当日的完整分时数据,从而画出该股票的日内分时图,有了分时数据,我们可以利用分时数据,做我们想要的日内指标、进出场点位的计算。

在下面的代码中,我们仍然以600519贵州茅台为例,通过real方法获取股票日内分时数据,并将分时图用Python绘图工具绘制出来。


quotation = easyquotation.use("timekline")querycode = '600519'Res_tx_mindata = quotation.real([querycode], prefix=True)querykey = 'sh' + querycode + '.js'mindata = pd.DataFrame(Res_tx_mindata[querykey]['time_data'], columns=['time', 'close', 'volume'])mindata['close'] = mindata['close'].map(lambda x: float(x))mindata['volume'] = mindata['volume'].map(lambda x: int(x))fig, ax = plt.subplots(1, 1)ax_sub = ax.twinx() # 共享x轴,生成次坐标轴l1, = ax.plot(mindata.time, mindata.close, 'r-', label='price')l2, = ax_sub.plot(mindata.time, mindata.volume, 'b-', label='volume')plt.legend(handles=[l1, l2], labels=['price', 'volume'], loc=0)ax.set_ylabel('price')ax_sub.set_ylabel('volume')ax.set_xlabel('time')ax.set_title('stock realtime')x_major_locator = MultipleLocator(10)ax.xaxis.set_major_locator(x_major_locator)

示例2:港股日线数据

除了A股的日内分时数据外,我们还可以通过real方法,获取到港股的日k线数据,只需要向该方法的参数中,传入5位数的港股股票代码,即可调用该部分数据。获取数据后,我们仍然用Python绘图,将示例股票00700腾讯控股的日k线数据量、价数据,绘制出来。


querycode = '00700'Res_tx_hk_dailydata = quotation.real([querycode])hk_dailydata = pd.DataFrame(Res_tx_hk_dailydata[querycode],columns=['Date', 'Open', 'Close', 'High', 'Low', 'volume', 'divi', 'none', 'amount'])hk_dailydata['Close'] = hk_dailydata['Close'].map(lambda x: float(x))hk_dailydata['volume'] = hk_dailydata['volume'].map(lambda x: float(x))fig, ax = plt.subplots(1, 1)ax_sub = ax.twinx() # 共享x轴,生成次坐标轴l1, = ax.plot(hk_dailydata.Date, hk_dailydata.Close, 'r-', label='price')l2, = ax_sub.plot(hk_dailydata.Date, hk_dailydata.volume, 'b-', label='volume')plt.legend(handles=[l1, l2], labels=['price', 'volume'], loc=0)ax.set_ylabel('price')ax_sub.set_ylabel('volume')ax.set_xlabel('time')ax.set_title(querycode + ' stock daily')x_major_locator = MultipleLocator(120)ax.xaxis.set_major_locator(x_major_locator)

示例3:港股实时行情

我们不仅可以获取港股的日线数据,还能获取港股的实时行情数据。具体的,我们将实例化的类切换成hkquote,并调用real方法,传入参数同样是五位数的港股代码,同时支持多股传入(逗号隔开),就可以获取到港股的实时数据了。此处我们以00001长和、00700腾讯控股为例,获取到了实时的Snapshot数据。


quotation = easyquotation.use("hkquote")Res_tx_hk_Snap = quotation.real(['00001', '00700'])

如果你想要获取完整的Easyquotation使用示例代码,欢迎添加技术宅个人微信sljsz01,sljsz05。如果对文章内容有任何疑问,也欢迎与我一起交流。

欢迎加入数量技术宅知识星球:量化学院,知识星球每日更新,内有更多量化干货,等着你来学习。量化学院=公众号全策略+星球独家量化干货+答疑+日更。欢迎订阅量化学院,用一年的时间,做一件让自己感动的事。

欲加入量化学院的同学,请添加技术宅微信sljsz01、sljsz05领取星球优惠券,优惠名额有限。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
古代4位奇人,大概500年出一位,能博古通今,那现今奇人是谁?

古代4位奇人,大概500年出一位,能博古通今,那现今奇人是谁?

铭记历史呀
2026-05-04 00:38:08
【世界说】美媒揭美国制造AI舆论套路:上亿“暗钱”织网,网红成“隐形游说工具”

【世界说】美媒揭美国制造AI舆论套路:上亿“暗钱”织网,网红成“隐形游说工具”

中国日报网
2026-05-04 19:24:05
学医后才明白,预防骨质疏松最好的习惯,不是晒太阳,而是3件事

学医后才明白,预防骨质疏松最好的习惯,不是晒太阳,而是3件事

垚垚分享健康
2026-05-04 19:15:04
华为Mate 90首发麒麟9050系列:8核心设计 华为最强芯片

华为Mate 90首发麒麟9050系列:8核心设计 华为最强芯片

快科技
2026-05-04 16:18:04
世上最失败4大工程:损失惨重,中国占俩!却说有意料之外效果?

世上最失败4大工程:损失惨重,中国占俩!却说有意料之外效果?

三毛看世界
2026-04-17 16:43:17
马苏深夜哽咽“一个人很久了”!孔令辉隔空回应:是我没顾上她

马苏深夜哽咽“一个人很久了”!孔令辉隔空回应:是我没顾上她

时间巡查
2026-04-25 16:06:47
我不同意!你不能发!新规正式施行

我不同意!你不能发!新规正式施行

潮TV
2026-05-03 14:03:44
官宣:阿里波夫将访华

官宣:阿里波夫将访华

中国基金报
2026-05-03 16:07:50
当不成总统了?全美爆发大规模混乱,特朗普或被迫下台

当不成总统了?全美爆发大规模混乱,特朗普或被迫下台

轩逸阿II
2026-05-04 08:24:59
3孩2非亲生后续更离谱!出生日期露马脚,妻子卷款跑路

3孩2非亲生后续更离谱!出生日期露马脚,妻子卷款跑路

一盅情怀
2026-05-04 16:41:47
金价银价直线下跌!今日金价及各大金店黄金价格(2026/05/04)

金价银价直线下跌!今日金价及各大金店黄金价格(2026/05/04)

新浪财经
2026-05-04 18:37:22
李金羽之后,下一位下课的主帅或也是泰山名宿,这哥俩帅位都危险

李金羽之后,下一位下课的主帅或也是泰山名宿,这哥俩帅位都危险

姜大叔侃球
2026-05-04 21:54:30
加快男性衰老的原因:喝酒仅排第5,排在第1的,很多男性都没发现

加快男性衰老的原因:喝酒仅排第5,排在第1的,很多男性都没发现

芹姐说生活
2026-04-30 16:07:48
电讯报:曼联有意签下M费,西汉姆若降级他大概率离队

电讯报:曼联有意签下M费,西汉姆若降级他大概率离队

懂球帝
2026-05-04 23:10:29
特斯拉中国新品上架!这价格真的好良心

特斯拉中国新品上架!这价格真的好良心

XCiOS俱乐部
2026-05-04 16:47:23
多NBA内部人士暗示戴维斯可能在未出战一场比赛情况下,就被交易

多NBA内部人士暗示戴维斯可能在未出战一场比赛情况下,就被交易

好火子
2026-05-04 01:49:10
索尼独占新作逆天伦理剧情引争议 政治正确拉满!

索尼独占新作逆天伦理剧情引争议 政治正确拉满!

3DM游戏
2026-05-03 10:49:06
贾母既没有诚心接纳林黛玉,也不满意薛宝钗,只因心尖孙媳是她!

贾母既没有诚心接纳林黛玉,也不满意薛宝钗,只因心尖孙媳是她!

呆子的故事
2025-08-15 18:04:01
乌克兰宝藏女神Vanessa Sigrid,29岁好似“人间天使”

乌克兰宝藏女神Vanessa Sigrid,29岁好似“人间天使”

娱你同欢
2026-05-04 22:24:15
油价飙升 阿联酋称遭到伊朗导弹袭击 霍尔木兹海峡局势升级

油价飙升 阿联酋称遭到伊朗导弹袭击 霍尔木兹海峡局势升级

新浪财经
2026-05-05 00:20:23
2026-05-05 01:08:49
数量技术宅 incentive-icons
数量技术宅
爱好数据分析量化投资的技术宅
272文章数 211关注度
往期回顾 全部

财经要闻

魔幻的韩国股市,父母给婴儿开户买股票

头条要闻

媒体:霍尔木兹海峡一声惊雷炸响 战争的引信已经点燃

头条要闻

媒体:霍尔木兹海峡一声惊雷炸响 战争的引信已经点燃

体育要闻

骑士破猛龙:加雷特·阿伦的活力

娱乐要闻

张敬轩还是站上了英皇25周年舞台

科技要闻

在中国市场搞「付费订阅」,豆包咋想的?

汽车要闻

同比大涨190% 方程豹4月销量29138台

态度原创

本地
时尚
旅游
数码
公开课

本地新闻

用青花瓷的方式,打开西溪湿地

谁说每年都要穿新衣服?准备一些基础款,百搭耐看又不过时

旅游要闻

假期沪郊露营地人气旺,林下经济激活乡村休闲新场景

数码要闻

华硕推出ZenScreen OLED MQ16FC便携显示器:16英寸,280欧元起

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版