当前位置: 首页 > 编程日记 > 正文

如何利用 C# 爬取BigOne交易所的公告!

在当今这个时代,投资可以说是每个人都应该学会的一项技能。拥有一些数字货币是程序员的信仰!交易所是进入数字货币世界最方便的一扇门,今天我就带着大家爬取 Bigone 交易所的公告数据。

首先,我们来看一下要爬取的页面以及对应的网址。

公告的第一页网址如下:

https://bigone.zendesk.com/hc/zh-cn/sections/115000476773?page=1#articles

对应的页面如下:

公告列表 第1页

公告的第二页网址如下:

https://bigone.zendesk.com/hc/zh-cn/sections/115000476773?page=2#articles

公告的第3页网址如下:

https://bigone.zendesk.com/hc/zh-cn/sections/115000476773?page=3#articles

观察每一页的网址,我们发现参数page的赋值表示所要爬取的页码。这样所要爬取的网址就搞定了。

这里需要注意一个问题:从请求的网址来看,数据的传输通过https协议,这个协议通常使用 SSL 密码学协议。但这个网站使用的是 TLS1.2 密码学协议。开始写这块代码的时候没有留意,结果抛出 “请求被中止: 未能创建 SSL/TLS 安全通道”异常。耗费了很大的精力才知道是这块出了问题。

然后,我们来看网页的源码。

源码 article-list 类

从网页的源码中我们发现所要的公告数据全部存储于 article-list 类的 a 标签中。

源码 a 标签

a 标签中,我们可以看到公告的标题,以及公告对应的详细网址。但是,没有该公告发布的时间。

接着,我们请求该公告对应的网址,得到网页的源码如下:

源码 time标签

通过这份源码,我们发现在 time 标签中我们可以得到该份公告发布的时间。这样,我们需要的数据就全部拿到了。

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

https://github.com/Ivony/Jumony

Jumony下载

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


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

Step1. 创建一个公告类的结构 Announcement

public class Announcement
{/// <summary>/// 交易所名称/// </summary>public string ExchangeName;/// <summary>/// 公告时间/// </summary>public string Time;/// <summary>/// 公告标题/// </summary>public string Title;/// <summary>/// 公告网址/// </summary>public string Url;/// <summary>/// 格式化 Announcement 输出/// </summary>/// <returns></returns>public override string ToString(){if (string.IsNullOrEmpty(Time))return base.ToString();DateTime dt = DateTime.Parse(Time);string result = "[" + dt.Year + "/" + dt.Month + "/" + dt.Day+ " " + Title.Trim() + "](" + Url + ")";return result;}
}

Step2. 获取对应网址的 HTML DOM TREE

public static IHtmlDocument GetHtmlDocument(string url)
{IHtmlDocument document;try{ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;document = new JumonyParser().LoadDocument(url);}catch{document = null;}return document;
}public static IHtmlDocument GetHtmlDocument(int page)
{string url = "https://bigone.zendesk.com/hc/zh-cn/sections"+ "/115000476773?page="+ page+ "#articles";return GetHtmlDocument(url);
}

Step3. 获取公告列表 List<Announcement>

public static List<Announcement> GetBigOneAnnouncement(int page)
{List<Announcement> result = new List<Announcement>();IHtmlDocument doc = GetHtmlDocument(page);if (doc == null)return result;List<IHtmlElement> lists = doc.Find(".article-list a").ToList();for (int i = 0; i < lists.Count; i++){Announcement announcement = new Announcement();announcement.ExchangeName = "Bigone";announcement.Title = lists[i].InnerHtml();string url = "https://bigone.zendesk.com"+ lists[i].Attribute("href").AttributeValue;IHtmlDocument temp = GetHtmlDocument(url);announcement.Url = temp.DocumentUri.ToString();List<IHtmlElement> t = temp.Find("time").ToList();announcement.Time = t[0].InnerHtml();result.Add(announcement);}return result;
}

Step4. 获取 Markdown 格式化文本

private string GetReport(List<Announcement> lst)
{if (lst == null || lst.Count == 0)throw new ArgumentNullException();string result = Environment.NewLine+ "**" + lst[0].ExchangeName + "**" + Environment.NewLine;for (int i = lst.Count - 1; i >= 0; i--){result += "- " + lst[i] + Environment.NewLine;}return result;
}

Step5. HTML渲染格式化输出文本

private void ShowMarkdownData(string str)
{string temp = Environment.GetEnvironmentVariable("TEMP");temp += "\\Announcements.txt";StreamWriter sw = File.CreateText(temp);sw.Write(str);Process.Start(temp);sw.Close();
}

Markdown文本

HTML渲染


到此为止,如何利用 C# 爬取 BigOne 交易所的公告就全部介绍完了。本文以及前几天哪篇 如何利用 C# 爬取 Gate.io 交易所公告 的图文都是为了 自动化 每周日的 「股市币市:本周交易数据分析与最新公告」,所以我做了一个 winform 以方便管理。

winform gateio

winform bigone

学一项技能,就要“以我为主,为我所用”,很多时候都是有一个想法,想想需要什么技能,想好后就去学了。中间遇到困难,不逃避,勇敢面对,干掉它就好。今天就到这里吧!See You!


相关图文:

  • 1. 如何利用 C# 爬取 One 持有者返利数据!
  • 2. 如何利用 C# 开发「桌面版百度翻译」软件!
  • 3. 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
  • 4. 如何利用 C# 爬取带 Token 验证的网站数据?
  • 5. 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!

相关文章:

如何提升自己的Web前端技术

如何提升自己的Web前端技术?问这个问题的一般都是有一些web基础的同学&#xff0c;还有一部分是自学的web前端技术&#xff0c;对自己目前的能力还比较模糊&#xff0c;下面小编就这个问题为大家做下详细的介绍。 如何提升自己的Web前端技术?在IT行业&#xff0c;任何一种专业…

tomcat 性能设置

Tomcat性能调优&#xff1a; 找到Tomcat根目录下的conf目录&#xff0c;修改server.xml文件的内容。对于这部分的调优&#xff0c;我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置&#xff0c;当然还有其他一些性能调优的设置&#x…

SAP的安装后基本设定

SAPLogon登录时候是乱码,设定登陆配置的代码页属性&#xff0c;勾选Unicode off SAP英文系统下中文显示乱码 设定字符集为GB2312 RZ10常用的配置参数rz10 编辑系统参数文件 rdisp/gui_auto_logout & rdisp/keepalive 用于控制闲置时间(秒) login/system_client 用于控制默认…

如何通过 Scratch 教小朋友编程思维?

寒假的时候&#xff0c;我带着自己的小孩学 Scratch&#xff0c;希望通过这种图形化的语言来训练他的编程思维。开学之后&#xff0c;很多事情需要处理&#xff0c;所以拖到现在才写总结。希望对大家有所启发。 在介绍如何做这件事情之前&#xff0c;先介绍一个学习方面的基本…

零基础怎么学习UI设计?有哪些简单的学习方法?

UI设计近几年的就业前景是非常好的&#xff0c;所以很多人都想要学习UI设计&#xff0c;那么零基础怎么学习UI设计?有哪些简单的学习方法?下面小编就给大家做下详细的介绍。 零基础怎么学习UI设计?有哪些简单的学习方法? UI设计行业是很注重技术的&#xff0c;零基础如果直…

让资源管理器不显示最近常用文件夹

右键点任务栏&#xff0c;点“属性”->Startmenu->在Privacy框中&#xff0c;把第二个√ 去掉&#xff0c;如下图所示&#xff1a;

C# 写Windows服务

服务是一个运行在后台的程序&#xff0c;他没有界面&#xff0c;不能交互&#xff0c;只能孤独的独自运行。 在开始->运行->输入services.msc可以打开服务管理器&#xff0c;这里可以查看和管理服务   很多时候都会用到服务&#xff0c;因为服务简化了我们的操作&#…

技术图文:如何利用 C# 爬取 ONE 的交易数据?

投资一个金融产品&#xff0c;最基本的就是拿到这个金融产品的交易数据&#xff0c;对这些数据进行可视化来判断趋势。去年&#xff0c;我在听 李笑来 讲区块链的课程上知道了 BigOne 这个由 INB 投资的交易所&#xff0c;而 ONE 是 BigOne 的平台币&#xff0c;持有 ONE 可享受…

java程序猿必读的学习书籍,良心推荐!

每年都有很多人想要学习java技术&#xff0c;有的是自学&#xff0c;有的是报班学习&#xff0c;但是都免不了要看书籍学习&#xff0c;书籍学习带来的知识更加牢记&#xff0c;也可以随时做笔记&#xff0c;下面小编就为大家推荐java程序猿必读的学习书籍&#xff0c;希望能帮…

Autools学习总结(一)

一、Makefile 简介 在编写C/C程序的时候&#xff0c;我们经常需要编译并运行代码。在程序规模较小的情况下&#xff0c;可以简单地直接调用编译器来完成这项工作。然而&#xff0c;在很多情况下程序往往包括大量的代码文件&#xff0c;手动调用编译器变得麻烦无比。尤其要命的是…

简单的实现IOCP服务器模型

其实已经有很多大佬将原理讲的十分详细了&#xff0c;所以就不花费时间将原理再一次重复讲一遍&#xff0c;有需要的可以自行去查看。 http://blog.csdn.net/beyond_cn/article/details/9336043 这篇文章是我看的&#xff0c;原理介绍十分详细。不过有一些操作感觉比较复杂因此…

资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

数据结构 是掌握计算机编程必须具备的技能。通常情况下&#xff0c;我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表、栈、队列、字符串、动态数字、整数集合、树、图、搜索、排序等涉及的算法全部写一遍。写完之后&#xff0c;基本上就把这门语言搞定了。 …

Python中爬虫框架或模块的区别

Python中爬虫框架或模块的区别&#xff0c;我们在Python的学习过程中&#xff0c;需要不断的总结知识点&#xff0c;这样我们才能进步的更快一些。 (1)爬虫框架或模块 Python自带爬虫模块&#xff1a;urllib、urllib2; 第三方爬虫模块&#xff1a;requests&#xff0c;aiohttp;…

SQL SERVER 2000写存储过程出现列名无效的解决方法

举一个Northwind的例子。DECLARE m_LastName nvarchar(20) DECLARE Sql varchar(256)SET m_LastName Fuller SET Sql SELECT * FROM Employees WHERE LastName char(39) m_LastName char(39) EXEC(Sql) 注意&#xff0c;要加上char(39)就可以了。转载于:https://www.cnblo…

如何利用 C# + Python 破解猫眼电影的反爬虫机制?

在 如何利用 C# 爬取「猫眼电影&#xff1a;最受期待榜」及对应影片信息&#xff01; 这篇图文中可以看到猫眼电影对“本月新增想看人数” 和 “总想看人数”进行了字符集加密。 在 如何利用 C# 爬取「猫眼电影&#xff1a;国内票房榜」及对应影片信息&#xff01; 这篇图文中也…

ZooKeeper学习笔记1-----------安装启动

ZooKeeper是一套协作服务&#xff0c;主要用来构建分布式架构的应用&#xff0c;通过ZooKeeper我们可以安全的处理分布式应用下的局部故障问题。我们知道ZooKeeper就是Hadoop中的分布式协作服务组件。下面我们进入ZooKeeper的安装部署。 安装Zookeeper https://zookeeper.apach…

软件测试培训完就业方向怎么选择

软件测试技术在近几年的发展前景是非常好的&#xff0c;越来越多的人都想要学习软件测试技术&#xff0c;报班是大多数人的选择&#xff0c;但是大家对于“软件测试培训完就业方向怎么选择”这个问题比较迷茫&#xff0c;我们来看看下面的详细介绍。 软件测试培训完就业方向怎么…

LeetCode实战:合并两个有序链表

题目英文&#xff1a; Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. Example: Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4 题目中…

Apache反向代理设置【转载】

编译Apache时要进行的设置./configure --enable-mods-shared"all proxy"1>修改 httpd.conf 文件中&#xff1a;LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules…

Suricata的输出

不多说&#xff0c;直接上干货&#xff01; 见官网 https://suricata.readthedocs.io/en/latest/output/index.html 总的来说&#xff0c;Suricata采集下来的数据输出分为&#xff1a;EVE 、 Lua Output 、 Syslog Alerting Compatibility 、 Custom http logging 、 Custo…

快速提高你的UI设计水平的一些小技巧

UI设计师这个岗位在最近几年的缺口是比较大的&#xff0c;很多企业都在招UI设计人员&#xff0c;想要学习UI设计或者提升UI设计技术的同学&#xff0c;可以看看小编分享的以下内容&#xff0c;善用这些UI设计小技巧&#xff0c;快速提高你的设计水平! 快速提高你的UI设计水平的…

hibernate join fetch

那天去了达内&#xff0c;试听了2个小时的课&#xff0c;刚好讲的他们的当当网项目&#xff0c;讲hibernate表关系映射这段来了&#xff0c;不过也够呛&#xff0c;投影仪看的眼睛点都不舒服&#xff0c;当时讲的也没认真听&#xff0c;听了个大概&#xff0c;就记住那个老师一…

Java IO 字节流与字符流 (三)

概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为&#xff1a;字节流和字符流 流按流向不同分为&#xff1a;输入流和输出流 IO流常用基类 字节流的抽象基类 InputStream&#xff0c;OuputStream 字符流…

LeetCode实战:两两交换链表中的节点

题目英文 Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list’s nodes, only nodes itself may be changed. Example: Given 1->2->3->4, you should return the list as 2->1->4->3.…

在UI设计中如何正确使用颜色

在我们进行UI设计时&#xff0c;颜色往往是我们表达理念重要的一点&#xff0c;但也是我们常常会忽视的一点。颜色其实如同语言一样&#xff0c;我们可以通过颜色的变化组合&#xff0c;来表达不同的情绪。 正确使用颜色不单能让我们吸引到客户&#xff0c;也能更好地表达我们的…

如何用Python做Web开发?——Django环境配置

用Python做Web开发&#xff0c;Django框架是个非常好的起点。如何从零开始&#xff0c;配置好Django开发环境呢&#xff1f;本文带你一步步无痛上手。 概念 最近有个词儿很流行&#xff0c;叫做“全栈”(full stack)。各大IT培训机构几乎都在宣传这一概念。告诉你只需要交1XXXX…

LeetCode实战:旋转链表

题目英文 Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: Input: 1->2->3->4->5->NULL, k 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2…

blog地址:

blog地址: blog地址: http://blog.csdn.net/q107770540posted on 2010-11-19 08:36 Tim_ 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/q107770540/archive/2010/11/19/1881399.html

Spring MVC框架有哪些优点

Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样&#xff0c;都属于MVC框架&#xff0c;但其使用和性能等方面比Struts2更加优异。 Spring MVC具有如下特点&#xff1a; 是Spring框架的一部分&#xff0c;可以方便的利用Spring所提供的…

MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)

1.數據層使用了SqlSugar 庫類 。 數據層使用了SqlSugar 庫類 &#xff0c;有興趣的 可以學習 http://www.codeisbug.com/Doc/8/1133&#xff0c;個人覺得比EF 簡單&#xff0c;容易上手&#xff0c;推薦1。 數據層使用代碼生成&#xff0c;所以考慮得比較多。 1.GetAllList()-…