🍊 Java学习:Java从入门到精通总结
小伙伴们大家好呀,不知道大家平时有购买基金理财的习惯吗?众所周知,我们程序员平时就是依靠写代码来作为自己的工作,并且靠这项技能来赚钱的。
那既然我们靠写代码来作为工作,那也可以用它来做一些副业赚钱。相信喜欢理财的同学们都幻想过,将来可不可以由计算机程序来为我们挑选股票、基金,这样就永远不会亏欠啦,提前实现经济自由。
又恰好,小王在浏览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的工具即可很容易的展现出代码为我们挑选的所有基金啦:
最后一列使用网页工具转的时候格式是乱的,可以先忽略掉,只看前面的部分
最后的最后还是要提醒大家:
- 基金有风险,买入须谨慎
- 爬虫的时候建议不要太频繁,把对方网站搞挂了也是有风险的
- 最各位小伙伴们早日实现财富自由~~~