Java 爬虫获取股票信息实战

命运唯所遇,循环不可寻。

1 前言

在之前的文章中,python爬虫-获取股票的k线图 已经介绍了如果通过 python 爬虫来获取股票的信息。在本文中则使用 java 通过爬虫获取股票的列表信息以及股票的基本信息,本文将使用到 jsouphutool 来实现接口和网页的信息抓取。最终的目的是为了获取市场上所有stock的信息,查找那些高股息的股票,听说有些 stock 的股息率比存款利率高多了,想研究一下。

2 数据来源以及分析

之前的文章中,采用的是东方财富网的数据,但是其数据没有股息率的指标,还需要运用数据计算,偶然间发现了雪球网站上有对应的指标,还有近一年的最高价与最低价,还有今年来的涨幅,这些指标减轻了一些计算的过程,如下图所示:

如上图所示,分页列表数据可以获取的信息很多,不仅包括股票代码和名称,还有市值、市盈率、市净率等信息,但是返回的字段比较多,需要和详情页的数据进行对比,才能知道字段的具体含义,此外关于数字类型接口返回的了科学表达式的方法,还需要进行处理。

bash 复制代码
# 股票列表访问地址
https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_0
# 获取股票行情页面
https://xueqiu.com/S/SH601919
# 获取网站列表分页接口数据
https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_0&order=desc&order_by=dividend_yield

如下图所示,所有的股票基本指标信息都可以从下图红框内获取,这里需要解析的是网站页面,通过 jsoup 可以获取对应的元素位置并获取对应的数值。

综上,作者将采用解析 html 的方式来获取信息,感兴趣的读者可以研究一下接口列表字段的返回值含义。

3 数据获取

股票数据信息的获取,分为两个部分,第一部分是从股票列表中获取获取代码,第二部分是根据股票代码获取股票详情页面,通过 jsoup 来抓取标签数据。

3.1 列表数据获取

获取数据列表信息使用的 hutool 工具类来处理,接口地址已经在上个小节中展示,需要注意的是这个是分页查询的,而且在访问接口时,需要从添加请求头 cookie 参数,这里不需要进行登录,从浏览器控制台的请求头中拿到一个 cookie 添加即可。

雪球返回的报文数据报文格式为 json,从 data -> list 中获取股票的数据节点,如上图所示,通过简单的对比就可以判断出字段的含义:

sql 复制代码
# 目前获取到的字段释义,这里只是部分内容
symbol 股票代码
name 股票名称
current 当前价格
percent 当前涨跌幅
chg 当前涨跌额
current_year_percent 当年涨跌幅
amplitude 振幅
dividend_yield 股息率
float_market_capital 流通市值
market_capital 总市值
turnover_rate 换手率
volume 成交量
amount 成交额
pe_ttm 市盈率
pb 市净率

如上代码所示,就可以获取股票的基本信息,我们需要声明一个 Stock 对象,用来封装股票的信息,在获取到列表信息后,再获取单个股票信息的信息,即可拿到完整的信息。

3.2 详细信息获取

获取到股票的代码后,就可以通过详情页面获取详细信息,这里先通过 hutool 获取详情页面的信息,然后通过 jsoup 来解析 html 文件内容。

通过分析 dom 树,可以通过 class="quote-container" 来获取信息内容, 所有的信息都在这个 div 中,首先需要解析 1755 球友关注 休市 08-04 15:34:51 北京时间, 我们需要从其中解析出股票的关注度(投资需要反人性)以及当前数据的时间,数据都空格做间隔,第一个和第四个数据就是我们需要获取的数据。

股票当天的表现数据都是在一个 class="quote-info"table 中,每个单元格 td 都保存着一个数据,我们需要解析每一个 td ,将将节点中的数据以 进行分割,即可得到一个 key-value 的结构,然后可以通过对应 key 来获取数据,这样的实现方便很多,但缺点是不优雅,存储的 key 为中文。

3.3 信息结果

通过以上的解析,我们已经写了两个方法,最终在 main 方法中将两个方法结合一下,就可以得到最终的结果,这里只是简单的打印了股票代码和名称,价格,市盈率等信息。

4 总结

在本文中,主要介绍了在雪球上获取股票信息的方法,使用 java 作为开发语言进行数据的抓取和处理,在后续的文章中,将继续进行数据的分析,从雪球抓取股票的 k 线数据,并且将数据保存至数据库中。欢迎大家的关注,本文中所涉及的代码已经上传至 github, 欢迎大家点赞关注。项目 github 地址 springboot-auth

相关推荐
鬼火儿5 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
cr7xin5 小时前
缓存三大问题及解决方案
redis·后端·缓存
间彧6 小时前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧6 小时前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧7 小时前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧7 小时前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧7 小时前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧7 小时前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧7 小时前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang7 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构