开发者学堂课程【大数据实战项目 - 反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第六阶段:爬虫识别-指标碰撞-代码实现总结】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/674/detail/11721
爬虫识别-指标碰撞-代码实现总结
内容介绍:
一、回顾
二、总结
一、回顾
之前将指标碰撞结果与选定与否无关、必须选定的计算完成,拥有流程中打分所需要的两个结果,碰撞做完。
二、总结
碰撞分为准备数据、指标碰撞两部分。
01准备数据
1、提取一个 ip 在八个结果集内对应的数据,
val ipBlockCounts=ipBlockCountsMap.getOrElse(ipBlock,0)
val ipCounts=ipCountsMap.getOrElse(ip,0)
val criticalPagesCounts=criticalagesCountsMap.getOrElse(ip,0)
val userAgentCounts=userAgentCountsMap.getOrElse(ip,0)
val differentJourneysCounts=differentJourneysCountsMap.getOrEls
e(ip,0)
val ipCookCount=ipCookCountMap.getOrElse(ip,0)
val minTimeDiff=minTimeDiffMap.getorElse(ip,0)
val lessDefaultTimes=lessDefaultTimesMap.getorElse(ip,0)
2、将取出的数据封装为 Map,将 Map 与流程数据传入碰撞方法
val dataParams=Map(
"ipBlock"->ipBlockcounts,
"ip"->ipCounts,
"criticalPages"->criticalPagesCounts,
"userAgent"->userAgentCounts,
"criticalcookies"->ipCookcount,
"flightQuery"->differentJourneyscounts,
"criticalPagesAccTime"->minTimeDiff,
"criticalPagesLessThanDefault"->lessDefaultTimes
02指标碰撞
1、根据算法需求实例两个 ArrayBuffer
//一个选定与否无关的数据分数,若数据的值大于设置的阈值返回数据的分数,反之返回0
//结果集的大小一直是8
val allRuleScoreList=new ArrayBuffer[Double]()
//一个必须是选定状态的并且数据的结果大于配置的阈值返回分数,反之不做返回
//结果大小不定
val selectRuleScoreList=new ArrayBuffer[Double]()
2、遍历流程数据,获取流程内的规则
for(flow<-flowList){
//获取流程内的规则(8个)
val rules=flow.rules
}
3、获取规则内的阈值
val databaseValue=if(rule.ruleName.equals("criticalPagesLessTha
nDefault") rule.ruleValue1 else rule.ruleValue0
4、获取数据计算出的结果
val dataValue=dataParams.getOrElse(rule.ruleName)
5、数据对比
//数据计算的结果大于阈值,根据需求将分数写入相应的ArrayBuffer内
//数据计算的结果小于阈值,根据需求填入ArrayBuffer(是否需要填写)
if(dataValue>databaseValue){
allRuleScoreList.append(rule.ruleScore)
//判断规则是否选中
if(rule.rulestatus==0){
selectRuleScoreList.append(ruleruleScore
)
}
}else{
//反之数据计算的结果小于阈值
allRuleScoreList.append(0)
}
数据值大于数据库值时添加值,反之添加0。必须选定的做判断。