基金数据爬虫

栏目: 编程工具 · 发布时间: 6年前

内容简介:购买基金可以参考一个法则:笔者实现了一个应用,依据上述法则筛选基金,降低广大基民踩雷的风险。本应用包含

购买基金可以参考一个法则:

1/4
1/3

笔者实现了一个应用,依据上述法则筛选基金,降低广大基民踩雷的风险。

本应用包含 数据爬虫数据存储数据展示 三个模块。本应用并没有采用传统的 SQL 作为数据库存储,而是直接利用Github作为数据存储服务器,并且利用 Travis-ci 的持续集成功能定时调度爬虫任务,前端展示的域名和伺服也是利用Github提供的gh-pages功能。因此,本应用是一个前后端都寄生在 GithubTravis-ci 免费应用 。 架构图如下所示:

基金数据爬虫

几乎每个编程语言都有爬虫框架,初学者大可基于自己熟悉语言的爬虫框架进行开发。笔者选择了JavaScript实现的 Crawler ,相对于主流的爬虫框架, Crawler 是比较冷门的,之所以选择它,是因为:

  • 本文所要爬取的基金数据并不复杂(数据来源是 天天基金 ,大部分数据可以直接通过调用数据API得到),无需借用Scrapy、WebMagic、Pyspider等重型利器
  • 本文将爬取的数据以JSON格式存储于Github,即后文中要展开的将Github作为云存储服务器,基于现有的JavaScript工具 GithubDB 可以快速实现存储功能

数据爬取

本文实现的基金数据爬虫 fund-crawler 完全基于NodeJS的,通过运行以下命令就能启动爬虫:

$ git clone https://github.com/nullpointer/fund-crawler
$ export TOKEN='Your github personal token'
$ cd fund-crawler
$ npm install
$ npm start

注意:运行本爬虫需要引入一个环境变量 TOKEN ,其值为Github的Personal Access Token,因为所爬取的数据会直接写入了一个Github上的代码库,而操作Github代码库的API最便捷的方式就是利用Personal Access Token。

在Github的开发者设置页 https://github.com/settings/tokens ,可以生成一个 TOKEN

基金数据爬虫

本爬虫要爬取的数据有两种:

  1. 不同类型的基金排行

    天天基金的排行可以通过API直接获取,不需要分析网页的结构,请求不同类型基金的API如下所示:

    const rankUri = 'http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=kf&ft=%s&rs=&gs=0≻=zzf&st=descπ=1&pn=10000&dx=1'
    
     c.queue({ uri: Util.format(rankUri, 'all'), type: 'all' }); // 全部
     c.queue({ uri: Util.format(rankUri, 'gp'), type: 'gupiao' }); // 股票型
     c.queue({ uri: Util.format(rankUri, 'hh'), type: 'hunhe' }); // 混合型
     c.queue({ uri: Util.format(rankUri, 'zq'), type: 'zhaiquan' }); // 债券型
     c.queue({ uri: Util.format(rankUri, 'zs'), type: 'zhishu' }); // 指数型
     c.queue({ uri: Util.format(rankUri, 'qdii'), type: 'qdii' }); // QDII
     c.queue({ uri: Util.format(rankUri, 'lof'), type: 'lof' }); // LOF
     c.queue({ uri: Util.format(rankUri, 'fof'), type: 'fof' }); // FOF

    请求URL的一个参数为 ft ,取不同的值表示不同的的类型。

  2. 每个基金的历史净值

    天天基金的历史净值也可以通过API直接获取,请求一直基金的历史净值的API如下所示:

    const uri = "http://fund.eastmoney.com/f10/F10DataApi.aspx?type=lsjz&code=%s&page=1&per=%s"
    
     Util.format(uri, code, records),

    请求参数中的 code 为基金的编码, per 为历史净值数据量。

数据存储

Github可以作为数据存储服务器,在Github上新建一个库(Repository),数据便可以文件的形式存储起来。本爬虫设置了默认的数据存储库;如果要更换成其他库,可以在 db.js 文件中可以修改以下代码片段:

const options = {
        owner: 'nullpointer',  // 修改为用户名
        repo: 'fund-data',     // 修改为库的名称
        ...
    };

所谓的数据存储,其实就是往Github提交改动。 GithubDB 实现了一个Github库的增删改查功能,就像操作普通的数据库一样,其内部的实现原理,就是利用Github提供的API来实现对Github库的读写操作。

该爬虫接入了 Travis-CI ,配置了定时任务,每天都会自动运行,因此每天爬取的基金数据会自动提交到Github上的数据存储库。

基金数据爬虫

当爬虫执行完毕,所爬取的数据就自动提交到了默认的 https://github.com/nullpointer/fund-data ,截取片段如下所示:

基金数据爬虫

数据展示

数据展示基于Angular 6、Bootstrap 4和 Nebular 实现,是一个部署在github上的前端页面。

点击访问 https://duanqz.github.io/fund-visualizer ,主要展示以下三部分信息:

  • 持仓推荐 :对于爬取的基金排行数据,会根据一年、两年、三年、成立以来、三个月、五个月的收益率进行排序,找出位于头部的基金
  • 基金排行 :展示不同类别基金的排行榜
  • 基金详情 :目前仅展示基金的历史净值图表

基金数据爬虫

基金数据爬虫

总结展望

相比于传统的前后端设计,本方案利用github作为后端存储和前端展示服务器,利用travis-ci持续集成作为爬虫任务调度,做到了 服务器投入零费用 ,是一款完全架设在现有免费资源上的应用。但由于数据存储没有采用SQL,在数据读取方面的性能并不强。

后续的工作计划:

  1. 爬虫优化:爬取更多基金信息,包括基金经理、持仓、评价等
  2. 数据分析:AI模型分析基金数据
  3. 展示优化:根据爬虫数据展示更多的基金信息,展示基于数据分析的推荐基金

以上所述就是小编给大家介绍的《基金数据爬虫》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字麦克卢汉

数字麦克卢汉

(美)保罗﹒莱文森(Paul Levinson) / 何道宽 / 社会科学文献出版社 / 2001年 / 20.0

本书是一本三合一的书。既是麦克卢汉评传,又是一部专著,而且是让网民“扫盲”和提高的指南。 《数字麦克卢汉》实际上有两个平行的主题和任务。一个是批评和张扬麦克卢汉。另一个是写作者自己的思想。它“不仅谋求提供进入数字时代的向导……而且谋求证明麦克卢汉思想隐而不显的准确性。为了完成这个双重任务,本书的每一章都试图阐明麦克卢汉的一种重要的洞见、原则或概念。与此同时,它试图揭示麦克卢汉告诉我们一些什么......一起来看看 《数字麦克卢汉》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具