打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用代码挑选最牛的基金,早日实现经济自由不是梦?

🍊 Java学习:Java从入门到精通总结

🍊 Spring系列推荐:Spring源码解析

📆 最近更新:2021年12月20日

🍊 个人简介:通信工程本硕💪、阿里新晋猿同学🌕。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤

🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力!


小伙伴们大家好呀,不知道大家平时有购买基金理财的习惯吗?众所周知,我们程序员平时就是依靠写代码来作为自己的工作,并且靠这项技能来赚钱的。


那既然我们靠写代码来作为工作,那也可以用它来做一些副业赚钱。相信喜欢理财的同学们都幻想过,将来可不可以由计算机程序来为我们挑选股票、基金,这样就永远不会亏欠啦,提前实现经济自由。

又恰好,小王在浏览github时发现了一个用代码爬取基金网站数据进行分析,进行分析后挑选出合适的基金,下面就进入正题带大家看一下他是怎么实现的。


项目地址

这段代码是由wayofwade开源分享在github上的,喜欢的同学可以为他点亮star~,根据readme.md文件里的说明操作即可运行:


点击跳转github源网站地址

如果访问github不稳定的同学可以点下面的链接获取这段代码:「deno-spider-master」

运行方式

deno版:
需提前安装deno

  • 有网络请求的:
deno run --allow-net denoFund.js
  • 读取文件的:
deno run --allow-net --allow-read --allow-write denoFund.js 
  • 允许所有权限
deno run --allow-all denoFund.js

node版:
需要安装node最新版本

node nodeFund.js

我对这段代码的理解

其实这段程序的代码量并不大,这里我简单整理一下作者的思路,如有错误的地方,欢迎大家指正。


从代码里不难发现作者定义的「优秀的基金」的标准:

1. 基金成立的时间要长一点: 成立三年以上
2. 基金的收益要高: 收益率超过100%


3. 基金经理必须是靠谱的: 在职时间超过3年

4. 基金体量足够大: 超过10亿以上的,毕竟规模越小的基金,波动性越大,衡量不出来它的优劣


从上面截图的url里可以看出来,作者选择了蛋卷基金这个网站来进行分析,从这个网页里选出优秀的基金(如果想要用其他网站的同学们请修改url地址!)

蛋卷基金的首页不用登陆就可以查看排行榜:


这段代码就可以查询出排行前XXX名的基金,过滤出了优秀基金的ID之后,就可以根据ID查询基金了,例如我在网页上搜一个001678:

网页地址为: https://danjuanfunds.com/funding/001678?channel=1300100141

我们可以通过url来获取数据: https://danjuanfunds.com/djapi/fund/001678

其中最后一个数字就是传入的基金ID:

有了上面那些方法之后,我们就可以一直请求接口来获取每一个基金的详情了,并按照我们最开始定义的好基金的标准来进行过滤:

const getAllFundData = async () => {
     // 获取所有的基金ID
     await getFundList();
     // 循环请求接口获取基金详情并过滤
     for (let i = 0; i < fundIdList.length; i++) {
         const  id = fundIdList[i]
         const myJson = await getFundDetail(id)
         const managerDetail = await getManagerDetail(id)
         const managerList = managerDetail.data.manager_list.length && managerDetail.data.manager_list[0]

         // 基金经理管理时间
         const keepTime = (managerList.achievement_list || []).filter((item) => {
             return item.fund_code === id
         })[0]?.post_date
         const fundDetail = getFilterData({...myJson, keepTime})
         const total = fundDetail.totalMoney.split('亿');
         // 成立超过7年的基金
         const fundTime = 1000 * 60 * 60 * 24 * 30 * 12 * 7
         // 基金经理在职时间
         const manegeTime = 1000 * 60 * 60 * 24 * 30 * 12 * 3
         const nowTime = new Date().getTime()
         const startTime = new Date(fundDetail.startDate).getTime()
         const keepTimeStamp = new Date(keepTime).getTime()
         if (nowTime - startTime > fundTime && total[0] && total[0] > 10 && nowTime - keepTimeStamp > manegeTime) {
             goodFundList.push(fundDetail)
         }
     }
     writeJson('./fundData.json', goodFundList)
     const endTime = new Date().getTime()
     console.log('-----deno--文件之后消耗时间', endTime - startTime)
 }

将查询到的数据经过上面所有条件过滤以后,就可以将得到的优秀基金列表放到文件里了(这里选用的是将其写到json文件里):

function writeJson(path, data) {
     try {
         const endTime = new Date().getTime()
         console.log('-----deno--消耗时间', endTime - startTime)
         Node.writeTextFileSync(path, JSON.stringify(data));
         return "Written to " + path;
     } catch (e) {
         return e.message;
     }
 }

百度一个在线jsonzhuanexcel的工具即可很容易的展现出代码为我们挑选的所有基金啦:

最后一列使用网页工具转的时候格式是乱的,可以先忽略掉,只看前面的部分

最后的最后还是要提醒大家:

  • 基金有风险,买入须谨慎
  • 爬虫的时候建议不要太频繁,把对方网站搞挂了也是有风险的
  • 最各位小伙伴们早日实现财富自由~~~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
构建快速、安全、可扩展的静态站点:终极指南
微信小程序数据统计和错误统计的实现
2020年5月Github上最热门的开源项目
将代码上传到GitHub上
flutter - sort List排序
Github-PAT(Personal Access Token)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服