python抓取A股市场历史数据(个股、指数)

Python采集股票数据信息 今天打算来整整股票,简简单单的采集一些股票数据对这个有兴趣的就一起来瞧瞧吧 阅读详情

@抓取金融市场数据

A股市场的关键数据

如果不是做短线,在一天内拼瞬时交易锁定投机收益。那每天只取一份数据就可以,用长时间的历史数据做决策分析(机会选择、持有收益计算,及交易策略的评估)。

个股数据与数据源

对于个股数据,可以拆分为个股基本属性信息和历史交易信息。
个股基本信息:可以包括行业、市值、利润、市盈率等中长期属性,这一部分季度/半年一看即可,不用抓取最新。
(从天天基金网抓取)

历史交易数据:每天要抓取最新的数据,累积至少5年的数据(我从2015.01.01开始,抓取5年的数据,网易提供了方便的数据获取接口,从网易可以获得任意长的历史数据,经过比较各家,个股历史数据的抓取还是163最好用)

python准备

工欲善其事必先利其器,数据抓取主要是从各种第三方抓,由于还是非付费用户,所以便捷高效的API是没有,各种网页解析而已。
这部分主要用了requests库和beautifulsoup页面解析库,拿来pip安装一下,然后import即可。
由于有些网页必须渲染后才能抓取,所以也引入了requests-html库,第一次使用的时候会下载一个浏览器内核。

抓取功能封成了function,后续可重用,高级的工具出来也方便替换。
有的网页涉及到动态技术需要渲染后才能抓到我们想要的信息,这部分抓取也要慢一些,单独做了封装。

#外部数据抓取引用库
import requests
from bs4 import BeautifulSoup
from requests_html import HTMLSession

#渲染抓取页面
def get_html_page_render(url):
    try:
        session=HTMLSession()
        r = session.get(url)
        r.html.render()
        session.close()
        return r.html.html
    except:
        return ""

#直接抓取页面
def get_html_page(url):
    try:
        rtime=0
        res=""
        #重试次数最大为8
        while len(res)==0 and rtime<8:
            #print("get url",url,rtime)
            r=requests.get(url,timeout=30)
            r.raise_for_status()
            r.encoding=r.apparent_encoding
            res=r.text
            rtime=rtime+1
            r.close()
        return res
    except:
        print("err",url)
        return ""

获取所有股票列表

A股全集的获取,经过各家评估,选择用天天基金网。
http://quote.eastmoney.com/stock_list.html
用requests直接做页面解析即可。

#抓取A股票列表,写入文件
def get_stock_list_in_file(filename):
    stock_list_url='http://quote.eastmoney.com/stock_list.html'
    #抓取网页获得HTML code
    htm=get_html_page(stock_list_url)
    fout = open(filename,"w")
    #istock=stock()
    soup=BeautifulSoup(htm, "html.parser")
    tags=soup.find_all('a',target="_blank")
    iget=0
    for tag in tags:
        str=tag.attrs['href']
        #通过正则从STRING中抽取CODE股票代码
        match=re.search(r's[hz]\d{6}', str)
        if not match:
            continue
        code=match.group(0)
        iget=iget+1
        fout.write(code+"\n")
    fout.close
    return iget

得到一个A股的全集列表,其中其实有不少已经退市的,还有各种指数,杂质比较多,不见得都能取得历史数据,可以算做一个大BASE吧。
一行一个CODE,大约5K条。
这里抓取的股票代码上海的带"sh"前缀,深圳的带"sz"前缀,在163获取个股历史数据的时候需要做些处理。

抓取个股历史交易信息

网易163的数据接口免费而且可以获取任意长的历史数据,堪称免费版本最良心。
不够个股编码有些不同,根据上面抓取的sh/sz标,在163抓取的时候需要做一些代码变换。具体规则大概是上海前面加“0”,深圳前面加“1”。

url举例:
http://quotes.money.163.com/service/chddata.html?code=0000300&start=20151219&end=20201108&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER
换掉code为股票代码,换掉start/end为起止日期,字段按需可选。

TAG意义
TCLOSE收盘价
HIGH最高价
LOW最低价
CHG涨跌额
PCHG涨跌幅
TURNOVER换手率
VOTURNOVER成交量
VATURNOVER成交金额
TCAP总市值
MCAP流通市值
#获取a股个股最新历史数据,最新在最前,每行为一天的数据
#format:DATE,收盘价,最高价,最低价,涨跌额,涨跌幅,换手率,成交量,成交金额,总市值,流通市值
#return:iget抓取到的行数
def get_stock_163_history(code):
    #编码转换
    org_code=code
    ncode=code.replace("sh","0")
    nncode=ncode.replace("sz","1")
    
    #抓取到当前日期
    latest_date = datetime.date.today()
    time_str=latest_date.strftime("%Y%m%d")
    url='http://quotes.money.163.com/service/chddata.html?code='+nncode+'&start=20150101&end='+time_str+'&fields=TCLOSE;HIGH;LOW;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
    iget=0
    r=requests.get(url)
    line=str(r.content)
    
    #指定抓取到存储的文件名,每个个股一个文件 
    filename='../data/'+org_code+'.his'
    fout=open(filename,"w")

    # 解析抓取回来的数据,格式化存储
    lines = line.split("\\n")
    for i in range(1,len(lines)):
        lines[i]=lines[i].replace("\\r","")
        res=lines[i].split(",")
        #如果列数不足,则此行格式有误,丢弃
        if len(res)>11:
            fout.write(res[0])
            for j in range(3,len(res)):
                fout.write("\t"+res[j])
            fout.write("\n")
            fout.flush()
            iget=iget+1
    fout.close
    return iget

抓取的每一个CODE,一个独立存储的文件,每行是一天的数据,第一列是日期。

大盘指数

a股的主要指数也都可以通过163的接口获得,指数的列表信息可以从天天基金网获取:
http://quote.eastmoney.com/center/hszs.html
指数很多,其实关键就看几个就行,比如沪深300,相当于把握大盘。

000001  上证指数,上证综合       sh000001
399001  深证成指        sz399001
000300  沪深300 sh000300
399005  中小板指        sz399005
399006  创业板指        sz399006
000010  上证180 sh000010
000016  上证50  sh000016
000009  上证380 sh000009
000132  上证100 sh000132
000133  上证150 sh000133
000003  B股指数        sh000003
000012  国债指数        sh000012
000905  中证500 sh000905

以上是我抓的几个常用指数,用来看看大盘、决策指数基金应该差不多啦。

待续,
后面还有抓基金的。
在动荡和不可解释的A股市场,没有内幕消息的小玩家先从货币基金和指数基金入手,再成熟点可以选些优质基金,让优秀的基金经理帮咱赚钱呀。

Python金额数据挖掘 第6章 第1节 (1)爬取股票信息 1、安装pandas_datareader pip install pandas_datareader 2、使用Stooq获取股票信息 Stooq,提供的都是指数 index 的历史数据。 # 导入包 import pandas_datareader.data as webdata import datetime import pandas as pd # data用于生成日期数据,开始-结束 start_day = datetime.datetime(2019,1,1) end_day = 阅读详情

相关推荐

Python爬虫技术教程——抓取A实时数据!

量化金融技术日新月异,数据就等于是新时代的石油。对于投资者和数据分析师来说,获取准确的股票历史数据是至关重要的。接下来编程君手把手教会你,,从东方财富网爬取A实时数据,并将其保存为本地的csv文件。先给大家介绍下这本**《用Python写网络爬虫》书籍.pdf资料**,这本书编程君是,适合有一定Python基础,而且对爬虫技术感兴趣的学员,。(内部学员联系专属辅导员即可)一、确定爬虫目标本次爬虫案例我们使用中国散户的聚集地——。

xjt921122的博客 4073

Python爬虫实战:爬取股票信息

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取本次选题是先写好代码再写的文章,绝对可以用到页面元素解析,并且还需要对网站的数据加载有一定的分析,才能得到最终的数据,并且小编找的这两个数据源无 ip 访问限制,质量有保证,绝对是小白练手的绝佳之选。郑重声明: 本文仅用于学习等目的。① Python所有方向的学习路线图,清楚各个方向要学什么东西。

2301_76161259的博客 7794

akshare库 | A股票价格指数数据获取

腾讯课堂 | Python网络爬虫与文本分析(戳一戳)~~A函数类型功能ak.stock_sse_summary()数据总貌当日上海证券交易所-股票数据总貌ak.stock_szse_...

大邓和他的Python 1万+

Python | AKShare获取A数据

akshare,获取A数据

hao20211228的博客 9172

A历史数据免费下载终极指南:4000+个股数据一键打包获取

本文提供了获取A历史数据的完整免费方案,重点介绍了Tushare Pro、AkShare等开源金融数据API的使用方法。通过详细的Python脚本示例,指导读者如何自动化批量抓取、清洗、存储4000多只个股的历史行情数据,并分享数据质量校验与性能优化技巧,助力量化研究与市场分析。

ooo22的博客 1670

A市场指数抓取以及相关性分析

指数相关性分析

weixin_42255757的博客 1122

python爬取所有A个股代码与名并保存为excle格式

使用requests, lxml, xlwt库,完成任务 利用pip3 install库名 安装各种第三方库 import requests from lxml import etree import xlwt headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...

wto882dim的博客 1316

FinanceDataReader 实战:5行代码轻松爬取KOSPI指数个股历史数据

**FinanceDataReader**是一款专为金融数据获取设计的Python工具库,让投资者和开发者能够用极简代码轻松获取全球金融市场数据。无论是韩国KOSPI指数个股历史价格还是国际市场数据,都能通过简洁直观的API快速获取,无需深入了解复杂的金融数据接口细节。 ## 📌 核心功能亮点 作为一款专注于金融数据读取的工具,FinanceDataReader提供了三大核心优势: -

gitblog_00478的博客 1160

如何用python抓取A5000支股票的数据

COLUMNS_CN = ["代码", "名称", "最新价", "涨跌幅%", "涨跌额", "成交量手", "成交额", "振幅%", "换手率%",num(item.get("f10")) if item.get("f10")!= "-" else None, # 市净率。COLUMNS_CN = ["代码", "名称", "最新价", "涨跌幅%", "涨跌额", "成交量手", "成交额",

weixin_65604922的博客 1041

Python数据分析-A市场成交量计算

在前文中,作者已经分析了股票、基金的相关分析和计算,在本文中将继续分享A市场成交量的计算,数据导出以及数据展示,主要是为了分享pandas数据处理的方法和思路,在本文中将涉及到pandas的数据合并以及pandas的数据导出。综上,本文使用了 pandas 进行数据计算和导出,主要介绍了数据计算的思路和方式,以及数据分析的一些技巧。相关代码已经上传至 github, 欢迎大家 star, 项目地址。

aobulaien001的博客 1762

【DeepSeek实战】31、Python高效抓取沪深A日K线数据全指南:从单线程到分布式实战

本文介绍了高效抓取沪深A日K线数据的三种技术方案。在获取全量股票代码方面,对比了免费开源的AKShare和专业稳定的Tushare两种方式。针对数据抓取需求,详细分析了单线程顺序抓取(8+小时)、异步分批抓取(45分钟)和分布式抓取(15分钟)三种方案,重点推荐了异步并发架构,并提供了分批策略优化和分布式实现方案。通过合理选择数据源和抓取方式,可显著提升数据获取效率,满足从个人量化分析到机构级批量处理的不同需求。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1974

Python金融分析入门:用TuShare快速抓取A历史数据(附完整代码)

本文详细介绍了如何使用Python库TuShare快速获取A历史数据,为金融分析奠定基础。内容涵盖环境配置、核心API调用(如获取个股数据)、构建多股票面板数据等实战步骤,并提供了完整的代码示例和避坑指南,帮助初学者高效入门量化分析。

tcp8optimizer的博客 534

Tushare Pro实战:5分钟搞定A历史数据抓取(附完整Python代码)

本文详细介绍了如何使用Tushare Pro快速获取A历史数据,包括环境配置、基础数据获取、多股票数据高效抓取技巧及数据清洗方法。通过完整的Python代码示例,帮助金融数据分析新手5分钟内搭建数据抓取流程,解决量化投资中的数据获取难题。

weixin_29291573的博客 333

如何使用Python抓取股票市场数据:实时和历史数据爬虫实现

股票市场是一个全球化、信息丰富且数据庞大的领域。对于投资者、数据分析师、研究人员等群体,获取实时和历史股票数据是进行决策分析、模型预测和趋势分析的基础。为了有效地抓取股票数据,Python作为一种流行的编程语言,凭借其强大的库支持和简便的开发流程,成为进行数据抓取和分析的首选语言。本文将详细介绍如何使用Python编写股票数据爬虫,抓取股票市场的实时数据和历史数据。我们将使用流行的。

2201_76125261的博客 2012

Python和efinance批量抓取A历史数据,并存入MongoDB的保姆级教程

本文详细介绍了如何使用Python和efinance库批量抓取A历史数据,并将其高效存储到MongoDB数据库的完整流程。从环境配置、数据采集模块设计、数据清洗标准化,到MongoDB存储优化和性能调优,提供了全面的工程实践指南,帮助开发者构建健壮的金融数据仓库。

weixin_30294295的博客 469

如何高效抓取沪深A的日K数据?——实战技巧与代码解析

通过本实战项目,我们介绍了如何利用异步编程高效抓取沪深A的日K数据。我们从基础代码回顾、异步抓取代码实现,到数据保存和完整性验证,一步步完成了整个流程。希望本文能帮助你更好地理解和应用异步编程技术。

无声旅者的博客 1282

Python实战:用baostock库抓取A历史数据并自动清洗(附完整代码)

本文详细介绍了如何使用Python的baostock库抓取A历史数据并进行自动化清洗,附完整代码示例。通过pandas实现数据获取、清洗和导出全流程,解决金融数据分析中的常见问题,如缺失值处理和异常值检测,生成可直接用于专业分析工具的标准化数据文件。

weixin_29098391的博客 643
下一篇: python抓取货币基金数据及基金收益数据分析
yamayamayama
博客等级 码龄6年 21粉丝 3原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值