【个人项目】基于scrapy-redis的股票分布式爬虫实现及其股票预测算法研究

前言

都说做计算机的,项目实践是最能带给人成长的。之前学习了很多的大数据和AI的知识,但是从来没有自己做过一个既包含大数据又包含AI的项目。后来就决定做了个大数据+AI的分布式爬虫系统。下面笔者会讲述整个项目的架构,以及所用到技术点的些许介绍。

项目介绍

这个项目是笔者的个人项目,是基于scrapy-redis框架的股票分布式爬虫框架实现。scrapy是个爬虫框架,但只允许单机的,scrapy-redis是它的补充,能支持分布式的爬虫爬取。完成爬虫框架后,我想玩点AI的东西,就设计了两个算法,预测股票每日的开盘价是多少。

项目包含两个部分:
1. 基于大数据知识的分布式爬虫系统
2.基于人工智能的预测系统(为什么是预测呢?因为我爬取的数据是股票数据)

项目的难度适中,有一定的算法实现(基于数据自己设计的),但总体要求不高。项目主要的特点是,用到的技术点很多,就是那种“这个用到那个用到,但就是不需要精通”,比如用到了Redis,Hadoop,Zookeeper,Hive等等,所以很适合大数据或AI专业的学生练手,因为可以学到很多模块。但对于有经验的读者来说,有兴趣的话可以研究下预测股票的算法,或者接着往下做。我实现了两种算法,但完成度都不高。

项目用到技术

技术点比较多,包含了大数据的部分框架和部分AI知识。
爬虫:Python,Scrapy
大数据:Zookeeper,Hadoop,Hive,Redis
AI: 反向传播神经网络,HTM神经网络,Kmeans算法,部分数学。

项目github链接

https://github.com/Jiede1/spider-based-on-scrapy_redis-for-share-and-share-prediction-algorithm-search

项目架构

下面是项目的框架图,包含3个部分。

这里写图片描述

分布式爬虫框架部分:

由三台主机组成,这三台主机组成一个Hadoop集群,并且集群的每一台都安装了scrapy,scrapy-redis组件,这些都是爬虫的必要组件(除此之外,Master需要安装Redis,所有的Slave都会访问这台Redis)。scrapy负责整个爬虫的框架,Redis负责存储爬虫产生的数据,scrapy-redis的存在使得三台机器可以基于Redis实现数据交互,也即爬虫分布式的体现。

在集群的Master上,放置了第一部分的爬虫代码,负责基于scrapy的框架,由输入的一个初始URL开始,通过爬虫规则,得到爬虫的目标URL,这里称之为download_url,并将之存到Redis。

在Slave1和Slave2上面,放置了爬虫的第二部分代码,负责从Redis中取得download_url,然后下载数据并储存到HDFS

这里要介绍下scrapy框架。scrapy是个出名的python爬虫框架,其实现的爬虫代码由几部分组成:爬虫初始URL start_urls,爬虫处理逻辑parse函数,爬虫处理数据逻辑pipelines函数,以及爬虫的各种各样中间件,和扩展组成。后两者的存在都是赋予爬虫更多的功能,更高的稳定性。

笔者的start_urls是http://quote.eastmoney.com/stocklist.html#sh,东方财富网的页面。

存储部分:

数据的存储笔者选择HDFS,主要原因有二:
1. HDFS是分布式的。
2. 基于HDFS存储,在后续的机器学习算法开发,或许会有更多的API支持,比如Spark支持读取HDFS为RDD。

但实际上,在我完成代码并测试的时候。发现利用HDFS作为储存引擎并不好,因为数据存储的功能是实现在爬虫框架里的,也就是说爬虫代码在运行的时候,会多次且频繁对HDFS进行读写。这设计到大量的内存交互和消耗,HDFS对频繁的读写是非常不友好的,会严重拖低爬虫速度。有多慢呢?就我的数据量来说,如果是保存到本地,也就几分钟跑完了,但如果是储存到HDFS里,要跑好几个小时。那酸爽!

所以,如果有读者以后也要实现分布式爬虫的框架,不要利用HDFS作为储存引擎,而是使用一些分布式数据库,比如Sequoiadb(国产数据库,性能比mongodb好),monagodb(比前者出名,更多api支持)。

算法预测部分

笔者爬取的数据是东方财富网的股票数据(并且是上海股票和深圳股票),数据大概长这样
这里写图片描述

数据在HDFS存储也是长这样,弄清楚了数据的结构,接下来的就是设计相应的算法来预测了。笔者预测的是“开盘价”这一字段。

笔者设计了两个算法:
1. BP神经网络+MSD相似度
2. HTM算法+kmeans+MSD相似度

首先笔者先说明,这两个算法的效果都略显尴尬,但算法2确实还算不错,但我只是随便选了一两条股票来预测然后plot出来看效果,没有更多的实验跟进;算法1简直就是灾难,命中率几乎为0,但算法1我当时主要是想瞎搞一下,读者看看笔者的思路就可,或许对你们有其他的启发呢,也说不定。

首先介绍下MSD相似度:
传统的相似度计算,比如余弦,曼哈顿等等,对于股票数据来说,不是特别适用。判定两只股票是否类似,不止要看他们数值向量之间的差距,还需要看他们“形态”之间的差距。所以笔者查看了一些论文,然后发现了MSD相似度—-这种相似度既考虑了两个序列的数值上的差异,也考虑了他们之间的“形态”上的差距。比如,从视觉上看,是否两个序列的走势是一样的。

MSD的计算方式:
这里写图片描述
其中, Li,L

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值