对于大部分程序员来说,都希望自己或多或少拥有一些比特币(BTC)。获取 BTC 的途径除了挖矿计算 Hash 值之外,就是去交易所购买了。

由于 BTC 的价格波动非常剧烈,入手 BTC 的时机就显得尤为关键。在交易所搞活动时入手,往往可以降低自己的交易成本。而程序员那里有时间看交易所的公告呢,做个爬虫来盯交易所的公告倒是一个不错的办法。


今天,我就带着大家用 C# 来爬取Gate.io交易所的公告。

首先,我们查看一下所要爬取数据的网页。

公告第1页的网址为:

https://gateio.news/articlelist/ann/0

公告第2页的网址为:

https://gateio.news/articlelist/ann/1

公告第3页的网址为:

https://gateio.news/articlelist/ann/2

可见所要爬取数据的网页地址,其变换的部分只有最后的页码数字。只要我们把这个数字作为参数传入到爬取函数中,即可爬取对应页面的数据。

其次,我们来看一下网页的源码,以第1页为例,其它的以此类推就好。

从该源码中我们发现,虽然页面显示为中文,但源码部分为英文。如果要获取中文的HTML DOM TREE 需要在网络请求头的 Cookie 中加入相应的说明 lang=cn,具体可见后面的 GetHtmlDocument 方法。

查看公告部分的源码,我们发现所有的公告数据全部存储在 latnewslist 类中,在该类中找到 a 标签的 href 属性,可以得到该公告的网页地址。从上面的源码中,我们可以得到对应公告的网址为:

https://gateio.news/article/16805

其源码如下所示,通过查找 new-dtl-info 类,我们就可得到该公告发布的时间。

最后,我们确定获取 HTML DOM TREE 的工具为 Jumony,可以在 Github 上下载。下载地址为:

https://github.com/Ivony/Jumony

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


上面我们对爬取的网页进行了分析,确定了技术路线,接下来,我们写代码实现爬取 Gateio 交易所公告的任务。

1. 创建“交易所公告”的结构 Announcement

public class Announcement
{// 交易所名称public string ExchangeName;// 公告时间public string Time;// 公告标题public string Title;// 公告网址public string Url;// 格式化 Announcement 输出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;}
}

2. 获取“交易所公告”的 HTML DOM TREE

public static IHtmlDocument GetHtmlDocument(string url)
{IHtmlDocument document;try{document = new JumonyParser().LoadDocument(url);}catch{document = null;}return document;
}
// 方法重载,得到给定页码的公告
public static IHtmlDocument GetHtmlDocument(int page)
{string url = "https://gateio.news/articlelist/ann/" + page;HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;if (request == null)return null;// 添加Cookie 中文显示request.Headers.Add("Cookie", "lang=cn");IHtmlDocument document = new JumonyParser().LoadDocument(request.GetResponse());return document;
}

3. 获取“交易所公告”的列表 List<Announcement>

public static List<Announcement> GetGateioAnnouncement(int page)
{List<Announcement> result = new List<Announcement>();IHtmlDocument doc = GetHtmlDocument(page);if (doc == null)return result;List<IHtmlElement> lists = doc.Find(".latnewslist").ToList();for (int i = 0; i < lists.Count; i++){IHtmlElement infor = lists[i].Find("a").ToList()[0];Announcement announcement = new Announcement();announcement.ExchangeName = "Gate.io";announcement.Title = infor.Find("H3").ToList()[0].InnerHtml();string url = "https://gateio.news" + infor.Attribute("href").AttributeValue;announcement.Url = url;IHtmlDocument temp = GetHtmlDocument(url);List<IHtmlElement> t = temp.Find(".new-dtl-info").ToList();announcement.Time = t.Find("span").ToList()[0].InnerHtml();result.Add(announcement);}return result;
}

4. Markdwon 格式化输出

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

5. HTML 渲染格式化输出的结果


到此为止,利用 C# 爬取Gate.io交易所的公告就介绍完了。希望本篇图文对大家有所帮助。今天就到这里吧!See You!


相关阅读

  • 如何利用 C# 开发「桌面版百度翻译」软件!
  • 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
  • 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!

如何利用 C# 爬取Gate.io交易所的公告!相关推荐

  1. 技术图文:如何利用C#爬取CSDN的博客文章?

    背景 大家有没有这样的体验,在 CSDN 上发现某个博主有很多干货文章,我们就想拿到这个博主以往文章的列表,在需要的时候进行查询和浏览. 如果从 CSDN 网站上用复制粘贴的方式来建立这个列表,一个是 ...

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

    投资一个金融产品,最基本的就是拿到这个金融产品的交易数据,对这些数据进行可视化来判断趋势.去年,我在听 李笑来 讲区块链的课程上知道了 BigOne 这个由 INB 投资的交易所,而 ONE 是 Bi ...

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

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

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

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

  5. 如何利用 C# 爬取 One 持有者返利数据!

    去年,10月份写过一篇图文 「One」的投资价值分析,多半年过去了,回头看看当时的判断还是合理的. 投资这种事情需要有自己的策略,更需要理性.任何决策都需要以数据作为判断的基础,哪么是否还继续持有 O ...

  6. 如何利用 C# 爬取带 Token 验证的网站数据?

    在对文本数据的情感分析中,基于情感词典的方法是最简单也是最常用的一种了. 它的大体思路如下: 对文档分词,找出文档中的情感词.否定词以及程度副词,然后判断每个情感词之前是否有否定词及程度副词,将它之前 ...

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

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

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

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

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

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

最新文章

  1. 005_HttpServlet
  2. 在线教育平台 PK 与 SAP 小众化的思考
  3. C和指针之字符串之strncpy、strncat、strncmp
  4. 【转】3.4(译)构建Async同步基元,Part 4 AsyncBarrier
  5. vimdiff的简单使用
  6. ios时间相差多少天_上海自驾拉萨,走川进青出,应如何规划线路?需要多少天时间?...
  7. ngnix的简单转发请求之server和location配置详解
  8. UE4之设置打包程序分辨率
  9. SCDN如何有效防御CC攻击和DDOS攻击的
  10. 【Python】从堆糖爬取图片Demo
  11. mysql 1556_mysqldump: Got error: 1556: You can't use locks with log tables.解决办法
  12. TankWar 单机(JAVA版)版本2.3~版本2.4 为坦克画血条
  13. u2020 华为_顶级锐龙标压U加持!华为MateBook 13 2020锐龙版评测:轻薄本稳压40W
  14. 70后.net老猿,尚能饭否?
  15. VS2012 msvcr110d.dll xxxxxx处有未经处理的异常:0xC0000005:写入位置xxxxxx时发生访问冲突(scanf_s引起)-已解决
  16. 【minimal problem】资料整理
  17. 关于iperf工具的了解
  18. undefinednbsp;methodnbsp;`titl…
  19. matlab控制理论学习
  20. 硕士论文分类号(中图法分类号)

热门文章

  1. 计组--习题--总线
  2. 上传代码到码云(第一次)
  3. 算法的sound和complete
  4. ios uiview 如何刷新_UIView的重绘及布局刷新
  5. 参加Java培训需要注意什么
  6. 【冷门实用小工具】JAVA和C#轻量级的UML图绘制工具NClass,UML类图编辑器免安装版【亲测有效】
  7. mysql以及mysql bench安装教程
  8. 通过响应式web设计,使本站支持手机浏览
  9. windows 2012 nps配置
  10. Android组件系列----BroadcastReceiver广播接收器