“知物由学”是网易易盾打造的一个品牌栏目,词语出自汉·王充《论衡·实知》。人,能力有高下之分,学习才知道事物的道理,然后才有智慧,不去求问就不会知道。“知物由学”但愿经过一篇篇技术干货、趋势解读、人物思考和沉淀给你带来收获的同时,也但愿打开你的眼界,成就不同的你。固然,若是你有不错的认知或分享,也欢迎在“网易易盾”公众号后台投稿。正则表达式
随着互联网开放式、爆发式地增加,数据的价值变得愈来愈重要,尤为是电商、传媒、社交等等业务,将数据比做黄金也不为过。于是随之诞生了网络爬虫技术,黑客经过调用网站开放的免费接口来批量获取有价值的数据,用以数据挖掘和分析行业情况等。然而大量的非法爬虫会形成网站服务器压力巨大,甚至影响正经常使用户的访问;并且有价值的数据被窃取,也会对网站的商业利益形成负面影响。算法
所以反爬虫技术应运而生。反爬虫技术大致包含“爬虫识别”和“爬虫反制”两个步骤,后者主要是用于对前者识别出的爬虫出的爬虫进行惩罚和反制,主要包括限制访问、验证码校验、数据投毒等等,本文不作深究。而前者目前经常使用的方式是基于规则判断。好比以某个用户或者IP为单位,统计其在必定时间内的访问记录,而后用人为设定的一些阈值,这种能够称为专家规则方法。其优势是规则明确、可靠,能够实时针对发现的爬虫特征来设定规则,从而实现与爬虫对抗。数据库
可是它也有明显的缺点:segmentfault
因为上述缘由,咱们结合了两项热门的技术:大数据和机器学习,来探究其在爬虫识别中的应用。api
1、基于Flink的大数据统计安全
首先咱们须要经过一些大数据技术来获取统计数据。Flink是一个新兴的分布式大数据流处理引擎,本文不作详细介绍,只是利用了其基于事件时间窗口统计数据的功能。
流处理过程主要包含如下步骤: 服务器
Flink流处理过程网络
Flink输出数据架构
字段含义:机器学习
a)counts: 是一个map,key是所访问的URI,value是访问计数
b)count: counts中不一样key的数量
c)sum: counts中全部value的和
d)min: counts中全部value的最小值
e)max: counts中全部value的最大值
2、数据的特征提取
要利用机器学习的算法来实现爬虫的判断,首先要将原始数据转化为向量,向量中的维度数据要尽可能包含数据的特征,这样才能尽量地区分爬虫和正常记录的差别。
经过观察发现,爬虫记录与正常记录相比,主要有如下特征:
针对以上特征,咱们用如下维度来组成数据的特征向量:
3、线下分析
咱们采用神经网络算法,该算法的优势是: 技术成熟、适应性强、工程化容易、可移植性强等等。可是它是一种有监督学习,须要有一批训练数据才能工做。
3.1 训练数据获取阶段:
获取训练数据的思路有两种:
咱们采用的方法是基于PCA+Kmeans的无监督学习算法,大概步骤以下:
3.2 模型构建和训练阶段
使用Pytorch搭建神经网络模型。能够分批、多组地用同一批数据反复训练模型。 当达到必定的迭代次数,或者损失函数小于必定阈值,则表示模型训练完毕。能够将模型参数文件导出,供线上部署。
一个简单的单层神经网络例子
训练过程
在测试集上的测试结果
4、线上部署
模型引擎的线上部署以下图所示。Training模块负责数据的线下处理和训练,训练完的模型文件上传至Nos,而后将模型的配置信息以及模型文件的地址写入Etcd。Model Engine模块是线上的模型引擎,实时监听Etcd中额配置,当配置更新时,会当即拉取模型文件,并加载。
Model Engine会消费Flink统计完写入Kafka的数据,并用模型作爬虫判别,并将判别的结果写入数据库,供其余系统查询使用。
线上部署架构
5、模型进化
到此咱们已经搭建了包含数据采集、线下训练、线上部署的模型引擎架构,可是正如前面所说,目前的模型只能达到与规则引擎相近的效果,要想让模型进化得更为智能,必须加入反馈机制,使得模型可以进化。
反馈的思路是从模型引擎的输出数据入手。神经网络分类算法的输出数据,除了包含记录是否属于爬虫的判断,还包含是否属于爬虫的几率。能够根据几率分为三段:非爬虫:0~33%、疑似爬虫:33%~66%,爬虫:66%~100%。
对三段抽样进行人工分析:
将分析完的数据做为新的训练集,对原来训练好的模型进行增量训练,使模型在保留部分历史经验的状况下获取新的特性。这一步固然也能够结合一些别的增量学习、迁移学习以及强化学习的算法来实现。
相关阅读: