两年前在一个微信群中,听一些朋友讨论林明璋的“超级数字力”课程,后来也听 李笑来 推荐过他的课程。由于比较远,我只买了一本 林明璋 写的《用生活尝试就能看懂财务报表》来读。再后来发现了他们做的这个网站 “财报说”。从该网站上我们可以看到各支股票按照 申万行业分类 做成了列表;每只股票都提供了 4年 的资产负债表、现金流量表 和 利润表,并利用一套五个维度(现金流、营运能力、盈利能力、财务结构、偿债能力)的模型进行评分。

我以前在图文 赚钱是刚需,如何正确的交易股票? 中介绍过自己的选股策略,从 000015 红利指数 的十大权重股中选择哪些分红能力强,且处于低估位置的股票。既然 林明璋 把自己的知识做成了网站,为何不把这些数据爬下来也作为自己在下一个周期选股的参考呢?


好了,我们开始吧!

首先,我们看一下「财报说 - 行业板块」对应的网页。

网址为:

https://beta.caibaoshuo.com/cn_industries/3

其次,我们看一下“一级行业”、“二级行业”、“股票列表”部分对应的网页源码。

“一级行业”部分对应的网页源码如下

通过网页的HTML DOM TREE找到第一个industries-header_section-lists类中的a标签,就可以得到一级行业的名称以及对应的网页地址。

“二级行业”部分对应的网页源码如下

通过网页的HTML DOM TREE找到第二个industries-header_section-lists类中的a标签,就可以得到二级行业的名称以及对应的网页地址。

“股票列表”部分对应的网页源码如下

通过网页的HTML DOM TREE找到table tbody tr标签(table 内部的 tbody 内部的 tr 标签,详见 CSS 的选择器语法)每一个 tr 对应表格中的一行数据,找到tr内部的td标签,就找到了希望获取的“股票名称”、“股票编号”以及显示股票详细信息的“网址”。

接着,我们爬取对应股票的详细数据。

如上图所示对应的网址为:

https://beta.caibaoshuo.com/companies/000858

对应的源码为:

通过网页的HTML DOM TREE找到header-price类,在该类中找到valuepepb-ratioratio-lowratio-normalratio-high这些类,就可以得到“当前股价”、“当前市盈率”、“当前市净率”、“10倍市盈率”、“20倍市盈率”、“30倍市盈率”的数据。

最后,我们用 Jumony 这套开源代码来获取网页对应的 HTML DOM TREE ,这套开源代码可以在 Github 上下载。

下载地址为:

https://github.com/Ivony/Jumony

这里对 Jumony 就不做过多介绍了,要是大家感兴趣,可以在图文下方留言,我后面再写几篇图文来介绍这个工具。


找到了所要爬取的网页地址,分析完网页的源码,确定了所用的工具和技术路线,剩下的就是写代码进行实现了。

Step1. 定义存储行业类型的结构 Industry

public class Industry
{/// <summary>/// 行业名称/// </summary>public string Name { get; set; }/// <summary>/// 对应网址/// </summary>public string Url { get; set; }
}

Step2. 获取一级行业的列表 List<Industry>

private const string Url = "https://beta.caibaoshuo.com";public static List<Industry> GetLevelOne()
{List<Industry> result = new List<Industry>();string url = Url + @"/cn_industries/3";IHtmlDocument doc = HtmlSpiter.GetHtmlDocument(url);if (doc == null)return result;List<IHtmlElement> lists = doc.Find(".industries-header__section-lists").ToList()[0].Find("a").ToList();for (int i = 0; i < lists.Count; i++){Industry item = new Industry();item.Name = lists[i].InnerHtml();item.Url = Url + lists[i].Attribute("href").AttributeValue;result.Add(item);}return result;
}

Step3. 获取二级行业的列表 List<Industry>

public static List<Industry> GetLevelTwo(Industry levelOne)
{List<Industry> lstResult = new List<Industry>();IHtmlDocument doc = HtmlSpiter.GetHtmlDocument(levelOne.Url);if (doc == null)return lstResult;List<IHtmlElement> lists = doc.Find(".industries-header__section-lists").ToList()[1].Find("a").ToList();for (int i = 0; i < lists.Count; i++){Industry item = new Industry();item.Name = lists[i].InnerHtml();item.Url = Url + lists[i].Attribute("href").AttributeValue;lstResult.Add(item);}return lstResult;
}

Step4. 定义存储股票信息的结构 StockCbs

public class StockCbs
{/// <summary>/// 股票名称/// </summary>public string StockName { get; set; }/// <summary>/// 股票编码/// </summary>public string StockId { get; set; }/// <summary>/// 网址/// </summary>public string Url { get; set; }/// <summary>/// 根据财报得出的评分/// </summary>public string CsbCourse { get; set; }/// <summary>/// 当前价格/// </summary>public string Price { get; set; }/// <summary>/// 市盈率/// </summary>public string Pe { get; set; }/// <summary>/// 市净率/// </summary>public string Pb { get; set; }/// <summary>/// 10倍市盈率/// </summary>public string Pe10 { get; set; }/// <summary>/// 20倍市盈率/// </summary>public string Pe20 { get; set; }/// <summary>/// 30倍市盈率/// </summary>public string Pe30 { get; set; }
}

Step5. 得到股票列表 List<StockCbs>

public static List<StockCbs> GetStocks(Industry industry)
{List<StockCbs> lstResult = new List<StockCbs>();IHtmlDocument doc = HtmlSpiter.GetHtmlDocument(industry.Url);if (doc == null)return lstResult;List<IHtmlElement> lists = doc.Find("table tbody tr").ToList();for (int i = 0; i < lists.Count; i++){List<IHtmlElement> row = lists[i].Find("td").ToList();StockCbs item = new StockCbs();item.StockName = row[1].FindFirst(".company-link").InnerHtml().Trim();item.Url = Url + row[1].FindFirst(".company-link").Attribute("href").AttributeValue;item.StockId = row[1].FindFirst(".code-in-list").InnerHtml().Trim();item.CsbCourse = row[2].InnerHtml().Trim();doc = HtmlSpiter.GetHtmlDocument(item.Url);List<IHtmlElement> lst = doc.Find(".header-price").ToList();item.Price = lst[0].FindFirst(".value").InnerHtml().Trim();item.Pb = lst[0].Find(".pepb-ratio span").ToList()[1].InnerHtml().Trim();item.Pe = lst[0].Find(".pepb-ratio span").ToList()[0].InnerHtml().Trim();item.Pe10 = lst[0].FindFirst(".ratio-low").FindFirst(".data").InnerHtml().Trim();item.Pe20 = lst[0].FindFirst(".ratio-normal").FindFirst(".data").InnerHtml().Trim();item.Pe30 = lst[0].FindFirst(".ratio-high").FindFirst(".data").InnerHtml().Trim();lstResult.Add(item);}return lstResult;
}

Step6. 结果输出

  • 爬取一级行业:爬取数据,填充“一级行业下拉列表”。
  • 爬取二级行业:根据选择的一级行业,爬取数据,填充“二级行业下拉列表”。
  • 爬取网页:爬取二级行业对应的所有股票信息。
  • 跳转到网页:跳转到二级行业所在的网页。


到此为止,关于如何利用 C# 语言爬取「财报说」中的股票数据,就介绍完了。大家有什么问题可以在图文的下方给我留言,今天就到这里吧!See You!


相关图文:

  • 如何利用 C# 爬取 One 持有者返利数据!
  • 如何利用 C# 爬取Gate.io交易所的公告!
  • 如何利用 C# 爬取BigOne交易所的公告!
  • 如何利用 C# 爬取 ONE 的交易数据?
  • 如何利用 C# 实现 K 最邻近算法?
  • 如何利用 C# 实现 K-D Tree 结构?
  • 如何利用 C# + KDTree 实现 K 最邻近算法?
  • 如何利用 C# 对神经网络模型进行抽象?
  • 如何利用 C# 实现神经网络的感知器模型?
  • 如何利用 C# 实现 Delta 学习规则?
  • 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
  • 如何利用 C# 爬取「当当 - 计算机与互联网图书销量榜」!
  • 如何利用 C# 爬取「互动出版网 - 计算机图书销量榜」!
  • 如何利用 C# 爬取「中国图书网 - 计算机与互联网图书销量榜」!
  • 如何利用 C# 爬取带 Token 验证的网站数据?

如何利用 C# 爬取「财报说」中的股票数据?相关推荐

  1. 如何利用 C# 爬取「当当 - 计算机与互联网图书销量榜」!

    前段时间我们介绍了如何利用 C# 语言来爬取"京东 - 计算机与互联网图书销量榜" 网页的方法,通过该方法,我们能够获得"京东"的图书销售排行榜数据. 可是,读 ...

  2. 如何利用 C# 爬取「猫眼电影专业版:票房」数据!

    在现代生活中,看电影已经成为大家的一种休闲方式. 前几天,我们介绍了 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!,通过这份"热映口碑"榜单,我们可以看到大家对当前 ...

  3. 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!

    我们生活在一个快节奏的时代里,每天除了辛苦的提升自己,为生活打拼之外,偶尔的放松去看场电影也是必要的.可是能够抽出的时间有限,选择看哪部电影就是一个挠头的问题了. 幸好,有类似猫眼电影.豆瓣电影.淘票 ...

  4. 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!

    以前我写过一些爬取猫眼电影数据的图文: 如何利用 C# 爬取「猫眼电影专业版:票房」数据? 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息? 如何利用 C# 爬取「猫眼电影:最受期待榜」及 ...

  5. 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息!

    "道路千万条,安全第一条!行车不规范,亲人两行泪!" 这句在影片"流浪地球"中不断重复的话语已经被大家所熟知.为了行车的安全,我们需要遵守规范,提前规划.同样, ...

  6. 如何利用 C# 爬取「中国图书网 - 计算机与互联网图书销量榜」!

    每周一,我们会爬取「京东」.「当当」.「互动出版网」和「中国图书网」的图书7日销量数据并做一份榜单,已经持续一段时间了,从后台阅读量的统计数据来看,对辅助大家选购计算机类书籍还是有帮助的.如果大家对这 ...

  7. 如何利用 C# 爬取「互动出版网 - 计算机图书销量榜」!

    想想自己看过的计算机方面的图书,大部分出自两个出版社,一个是 机械工业出版社,另一个是 人民邮电出版社.我们熟悉的 China-pub 即 互动出版网 收录了几乎所有机械工业出版社出版的图书. 今天我 ...

  8. 利用 Python 爬取了近 3000 条单身女生的数据,究竟她们理想的择偶标准是什么?

    灵感来源与学习:利用 Python 爬取了 13966 条运维招聘信息,我得出了哪些结论? 本文原创作者:壹加柒 本文来源链接:https://blog.csdn.net/yu1300000363/a ...

  9. 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!

    当前,信息技术领域的知识在飞速的更新.作为一个程序爱好者,或者说已经超过 10年 的老码农,稍有懈怠就会被落下!跟踪当前信息技术领域的畅销书,结合自己所做的事情买来阅读,以便提升技能,就显得非常重要了 ...

  10. Python利用Scrapy爬取智联招聘和前程无忧的招聘数据

    爬虫起因   前面两个星期,利用周末的时间尝试和了解了一下Python爬虫,紧接着就开始用Scrapy框架做了一些小的爬虫,不过,由于最近一段时间的迷茫,和处于对职业生涯的规划.以及对市场需求的分析, ...

最新文章

  1. 矩阵的卷积核运算(一个简单小例子的讲解)深度学习
  2. Py之mpld3:mpld3的简介、安装、使用方法之详细攻略
  3. hdu4699-Editor【对顶栈】
  4. 在mysql中建立聚簇索引_给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引...
  5. java怎么用doss窗口_GitHub - doss128/symphony: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。...
  6. twisted系列教程十–可以变化的诗
  7. html中地图的绘制toolbars,tkinter内嵌Matplotlib系列(二)之函数曲线绘制
  8. 吴征:只为寻找到杨澜
  9. [设计模式-行为型]中介者模式(Mediator)
  10. 森林病虫防治系统 (一)
  11. 线程间通信方式 java_深入理解JAVA多线程之线程间的通信方式
  12. python输入直角三角形两条直角边、输出斜边长_用C++输入直角三角形的两条直角边长,调用平方根函数sqrt来求斜边的长度。...
  13. 分享基于SpringBoot2+MybatiPlus+LayUI+Snaker+Mysql技术前后端分离开源后台管理系统脚手架
  14. Java8增加功能--Effectively final 功能
  15. 37岁程序员被裁,120天没找到工作,无奈去小公司,结果蒙了
  16. Oracle数据库查询语句去重,Oracle数据库之SQL---select查询
  17. ubuntu 18.04 使用intel核显画面撕裂解决办法
  18. 海康软件web拉取视频流遇到的坑
  19. layui 搜索 重置 自动刷新
  20. TouchGFX- 1 - 简介与安装

热门文章

  1. python 拟合对数正态分布
  2. 分享一篇前端大佬关于前端职业规划的建议
  3. excel怎么把两个表格合成一个
  4. Leetcode13. 罗马数字转整数Leetcode14. 最长公共前缀Leetcode15. 三数之和Leetcode16. 最接近的三数之和Leetcode17. 电话号码的字母组合
  5. Vuex的基本使用及总结(超详细)
  6. matlab 保存图片大小尺寸_改变figure大小存储图片(matlab)
  7. 云计算技术基础复习知识点
  8. 测试三极管的口诀[转]
  9. 战斗在 VUCA 时代
  10. echarts实现词云图表,及参数配置详解