🍊 Java学习:Java从入门到精通总结
🍊 Spring系列推荐:Spring源码解析
📆 最近更新:2021年12月20日
🍊 个人简介:通信工程本硕💪、阿里新晋猿同学🌕。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤
🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力!
小伙伴们大家好呀,不知道大家平时有购买基金理财的习惯吗?众所周知,我们程序员平时就是依靠写代码来作为自己的工作,并且靠这项技能来赚钱的。
那既然我们靠写代码来作为工作,那也可以用它来做一些副业赚钱。相信喜欢理财的同学们都幻想过,将来可不可以由计算机程序来为我们挑选股票、基金,这样就永远不会亏欠啦,提前实现经济自由。
又恰好,小王在浏览github时发现了一个用代码爬取基金网站数据进行分析,进行分析后挑选出合适的基金,下面就进入正题带大家看一下他是怎么实现的。
这段代码是由wayofwade开源分享在github上的,喜欢的同学可以为他点亮star~,根据readme.md文件里的说明操作即可运行:
如果访问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%
从上面截图的url里可以看出来,作者选择了蛋卷基金这个网站来进行分析,从这个网页里选出优秀的基金(如果想要用其他网站的同学们请修改url地址!)
蛋卷基金的首页不用登陆就可以查看排行榜:
我们可以通过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的工具即可很容易的展现出代码为我们挑选的所有基金啦:
最后一列使用网页工具转的时候格式是乱的,可以先忽略掉,只看前面的部分
最后的最后还是要提醒大家:
联系客服