如何结合爬虫技术让你的金融投资更具科学性

百度已收录   阅读次数: 124
2021-10-2522:50:59 发表评论
摘要

前几天,伯衡君曾经介绍了一篇有关投资的文章,以基金投资为例,具体可以参看下方的前情提要,本篇文章,则是继续沿着这篇文章探索更为一些深层次的内容,那就是如何获得一种能够超越大多数人见识的方法,除了一定的天资过人的少数人外,那么最容易达成这种目的的方法就是所谓的见多识广,即消息的获得快而及时,此前,伯衡君也介绍过有关rss获取消息的方式,但是在金融领域,则是远远不够的……

如何结合爬虫技术让你的金融投资更具科学性

开篇寄语

前几天,伯衡君曾经介绍了一篇有关投资的文章,以基金投资为例,具体可以参看下方的前情提要,本篇文章,则是继续沿着这篇文章探索更为一些深层次的内容,那就是如何获得一种能够超越大多数人见识的方法,除了一定的天资过人的少数人外,那么最容易达成这种目的的方法就是所谓的见多识广,即消息的获得快而及时,此前,伯衡君也介绍过有关rss获取消息的方式,但是在金融领域,则是远远不够的……

前情提要

内容详情

在上一篇以基金投资为例的那篇文章,介绍了一个根本原理,即投资就是投资希望,未来盈利效果更佳的基金才更值得投资,那么就需要了解当下及未来的趋势,想知道未来的发展趋势,势必需要有大量的消息作为基础,这是一个长期而又需要有足够的判断能力才能做到的。

而在瞬息万变的金融领域,消息的更快获取,则能够让你得到或者失去足够多的财富。

试举一例,在几年前,美国制裁中兴这条消息,在美国发出接近一天的时间后,中国大陆的媒体才有所报道,那时候股市已经闭市,想要出逃的股民不幸沦为了被割的韭菜,这足以让投资者明白,消息的滞后性的可怕。

通过rss获取消息确实是一个不错的方法,但是实效性确实也有些缓慢,短则5分钟,长则30分钟,那怕只有5分钟,期间错过的机会会有多少呢?

所以就需要自制一个爬虫机制,每分钟或者每几秒钟就获取一次消息。

伯衡君就用nodejs自制了一个这种的爬虫,每30秒爬取一次信息,获取足够多的资讯,将新消息排在前面,筛选掉重复的内容。将每天爬取的结果,自动生成一个html文件,以方便历史查询,如下图所示:

如何结合爬虫技术让你的金融投资更具科学性

我将爬虫部署在VPS,使用PM2运行,然后通过网页访问内容,一目了然,具体可以参看下图:

如何结合爬虫技术让你的金融投资更具科学性

因为涉及商业机密(目前有100多个财经网站爬取中),伯衡君就只分享三个网站爬虫的代码好了,分别是腾讯新闻财经频道,网易新闻商业频道以及新浪新闻财经频道,代码如下:

var http = require('http');
var async = require("async");
var request = require('request');
var cheerio = require('cheerio');
const utf8 = require('utf8');
var fs = require('fs');
var year = new Date().getFullYear();
var month = new Date().getMonth() + 1;
var days = new Date().getDate();
var tdays = year + '-' + String(month).padStart(2, "0") + '-' + String(days).padStart(2, "0");
var selectArr = [];
//Sohu News
const options_sohu = {
    uri: 'https://bird.ioliu.cn/v1?url=https://business.sohu.com/',
    method: 'GET',
    headers: {
        'Content-Type': 'text/html; charset=UTF-8',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
    }
};
//Sina News
const options_163 = {
    uri: 'https://bird.ioliu.cn/v1?url=https://money.163.com',
    method: 'GET',
    headers: {
        'Content-Type': 'text/html; charset=UTF-8',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
    }
};
//Tencent News
var requests = [{
    url: 'https://i.news.qq.com/trpc.qqnews_web.kv_srv.kv_srv_http_proxy/list?sub_srv_id=finance&srv_id=pc&offset=0&limit=100&strategy=1&ext={%22pool%22:[%22hot%22],%22is_filter%22:2,%22check_type%22:true}',
}, ];

setInterval(() => {
    var hours = new Date().getHours();
    var minutes = new Date().getMinutes();
    var seconds = new Date().getSeconds();
    var tims = String(hours).padStart(2, "0") + ":" + String(minutes).padStart(2, "0") + ":" + String(seconds).padStart(2, "0");
    request(options_sohu, function(err, res, body) {
        if (err) {
            console.log(err);
        } else {
            const $ = cheerio.load(body.replace(/\\/g, ""));
            $('.z-main-1_mid a').each(function() {
                selectArr.push(`<li>${$(this).text()}</li>`)
            });
            $('.s-two_left_btm_left a').each(function() {
                selectArr.push(`<li>${$(this).text()}</li>`)
            })
            selectArr = [...new Set(selectArr)];
        }
        request(options_163, function(err, res, body) {
            if (err) {
                console.log(err);
            } else {
                const $ = cheerio.load(body.replace(/\\/g, ""));
                $('li a p').each(function() {
                    let resin = $(this).text().trim().replace(/[nt]/g, "")
                    if (resin.length != 0 && resin != '上证指数' && resin != '深证成指' && resin != '沪深300') {
                        selectArr.push(`<li>${resin}</li>`)
                    }
                });
                selectArr = [...new Set(selectArr)];
            }
            async.map(requests, function(obj, callback) {
                // iterator function
                request(obj, function(error, response, body) {
                    if (!error && response.statusCode == 200) {
                        // transform data here or pass it on
                        body = JSON.parse(body);
                        callback(null, body);
                    } else {
                        callback(error || response.statusCode);
                    }
                });
            }, function(err, results) {
                if (err) {
                    console.log(err)
                } else {
                    for (var i = 0; i < results.length; i++) {
                        for (let a of results[i].data.list) {
                            selectArr.push(`<li>${a.title}</li>`)
                        }
                    }
                }
                selectArr = [...new Set(selectArr)].filter(x => x.indexOf('网易经济学家') == -1 && x.indexOf('致辞') == -1 && x.indexOf('峰会') == -1);
                fs.writeFile(`${tdays}.html`, `<h1>财经摘要</h1><h4 style="margin-bottom:10px;">新闻总数:${selectArr.length} 更新时间:${tims}</h4>` + selectArr.reverse().join(""), function(err) {
                    if (err) throw err;
                });
            });
        });
    });
}, 5000);
http.createServer(function(req, res) {
    fs.readFile(`${tdays}.html`, function(err, data) {
        res.setHeader("Content-Type", "text/html; charset=utf-8");
        res.end(data);
    })
}).listen(43219);

以上代码可以自行增删添改,这样一来,能够为你的科学投资提供坚实的信息层面的基础,让你的投资更有把握从中盈利。

一定要扩充足够的消息源,同时至少掌握两门以上外语为佳,伯衡君对英语,中国普通话和日语颇为熟稔,所以财经消息则是以这三种语言为主。

后续进展

伯衡君的一位读者就根据本篇文章而在20天的时间内收益率达到了9%,具体可以参看下方文章:

分享至:
  • 我的微信
  • 微信扫一扫加好友
  • weinxin
  • 我的微信公众号
  • 扫描关注公众号
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: