开发者学堂课程【大数据实战项目 - 反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第六阶段:爬虫识别-爬虫判断思路】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/674/detail/11716
爬虫识别-爬虫判断思路
目录:
一、课程计划
二、目标
三、需求
四、设计
第五阶段做完,开始进行第六阶段。第五阶段和第六阶段都用来做爬虫识别,第五阶段实现了前半部分,八个指标的计算,第六部分判断是否是爬虫,做备份恢复操作。
一、课程计划
1、规则匹配和打分并进行阈值判断
第五阶段算完八个指标的结果,用八个指标的结果与企业配置好的规则阈值匹配,打分,打完分后有最终的分数,用此分数与企业的阈值判断。数据计算到最后有一个分数,拿计算好的分数与企业黑名单分数做对比求大小关系,能断定是否为爬虫。
2、剔除非黑名单数据
将不是爬虫的数据,非黑名单数据剔除,剔除非爬虫数据剩下的是爬虫数据。
3、黑名单数据去重
爬虫可能有重复数据,进行去重
4、黑名单 Redis 数据恢复
5、黑名单数据备份到 Redis
去重拿到黑名单数据后写到 Redis,总体流程中第六步,把结果写到
Redis
Redis 基于内存,当机或断电有可能造成数据丢失
6、黑名单数据实时存储hdfs,用于Redis数据恢复
数据写到 Redis 的同时将黑名单数据写到 hdfs,用于 Redis 数据恢复。丢了数据,恢复数据,回到第四个环节黑名单 Redis 数据恢复。
7、存储规则计算结果 RDD 到 HDFS
第七阶段主要工作是离线计算,企业中领导想看的报表。
需要计算出指标,计算出指标需要有数据。数据在第七阶段离线分析准备数据。
规则匹配和打分并进行阈值判断
二、目标
目标:计算出每一个数据是否是爬虫
三、需求
已经通过 streaming 程序计算出5分钟内的各个指标,针对每一次请求进行评比打分,根据分数和阈值对比判断是否是爬虫。
四、设计
1、获取到封装好的 processedData 进行 map 操作,得到每一条访问数据
拿到八个结果,下一步在此批数据中拿到每一条数据。
截取数据中 ip,用 ip 截取八个结果对应的值。企业配置的八个阈值针对八个指标,每个指标的结果,10、10、1、1、2等数字。拿出数据在八个指标的数字,数字与数字对比可得到大小关系。
2、使用数据库流程策略、ip、和所有收集的 map 为指标碰撞准备数据
数据中抽取出 ip、八个结果的 map、规则库,能够拿到一条数据在8个结果集内对应的指标值。企业配置的值在广播变量 broadcastFlo
wList 里。以下数据
有流程规则、ip、所有数据后计算出结果为指标碰撞准备数据。
指标碰撞
企业里配置的8个阈值、一条数据在8个结果集内对应的指标值(用 ip 和八个结果求出)为指标碰撞准备数据。
3、指标碰撞分析将数据计算的值与企业配置的阈值进行对比,为打分算法准备数据
企业里配置的8个阈值与一条数据在8个结果集内对应的指标值进行对比,根据大小关系为打分算法准备数据。指标碰撞计算出与选定与否无关得分结果集、选定的结果集,为打分算法准备。
4、打分算法接收数据返回分值
5、根据分值与最终阈值进行对比,判断是否是爬虫
反爬虫规则:黑名单阈值>100
根据算出的值与100或自己设置的值对比,判断是否是爬虫
6、最后将所有打分结果封装到 AntiCalculateResult 中返回
AntiCalculateResult
在 businessprocess AntiCalculateResult 里
case class AntiCalculateResult(processedData: ProcessedData
ip:string,
ipBlockCounts:Int,
ipAccessCounts: Int,
criticalPageAccessCounts: Int
userAgentCounts: Int
,
critivalPageMinInterval: Int
,
accessPageIntervalLessThanDefault:Int, differentTripQuerysCounts: Int
,
criticalCookies: Int
,
flowsScore:Array[FlowScoreResult])
AntiCalculateResult
是反爬虫项目爬虫识别的最终目标,将需要的数据都封装到此,爬虫识别计算完毕。