开发者学堂课程【大数据实战项目 - 反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第六阶段:爬虫识别-指标碰撞-准备数据 avi】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/674/detail/11717
爬虫识别-指标碰撞-准备数据 avi
目录:
一、判断是否为爬虫
二、爬虫识别实践
三、指标碰撞详细步骤
一、判断是否为爬虫
分为6步
1、获取到封装好的 processedData 进行 map 操作,得到每一条访问数据
2、使用数据库流程策略、ip、和所有收集的 map 为指标碰撞准备数据
3、指标碰撞分析将数据计算的值与企业配置的阈值进行对比,为打分算法准备数据
4、打分算法接收数据返回分值
5、根据分值与最终阈值进行对比,判断是否是爬虫
6、最后将所有打分结果封装到AntiCalculateResult 中返回
六步可细化为三个部分,爬虫识别流程中的爬虫识别分指标碰撞、最终打分、爬虫判断三步。
//爬虫识别
//1指标碰撞
//2最终打分
//3爬虫判断(结论:是/不是)
二、爬虫识别实践
获取到封装好的 processedData 进行 map 操作,得到每一条访问数据
拿到八个结果,下一步在此批数据中拿到每一条数据。
截取数据中 ip,用 ip 截取八个结果对应的值与企业配置的八个阈值对比。
用此八个结果做数据碰撞,需要抽取数据。
拿到原始数据调用 map 拿到某一条数据,抽取 ip,将流程和八个结果放到一个方法做。
processedData
为原始数据,1-8步都使用了 processedData。一批数据进入processedData
产生八个结果,再从 processedData 里拿出某一条数据。
processedData
调用.map 操作,拿到一条数据。一条数据中获取数据中 ip,val ip=message.remoteAddr
processedData.map(message=>{
//获取数据中 ip
val ip=message.remoteAddr
ip、数据库中流程规则、八个结果三个数据为指标碰撞准备数据,不能都写到获取数据中 ip 否则代码很多、很大、很乱,放到独立的方法里,在方法里准备数据。
方法名字RuleUtil.calculateAntiResult 计算反爬虫结果
计算结果
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])
最终返回样例列,将需要用到的所有数据封装完,ProcessedData、ip、八个指标(ipBlockCounts:Int, ip
段对应的值、ipAccessCounts: Int,ip
访问总量对应的值、criticalPageAccessCounts: Int、userAgent
Counts: Int
,critivalPageMinInterval:Int,
accessPageIntervalLessTha
nDefault:Int, differentTripQuerysCounts: Int
,criticalCookies: Int,)
有 ProcessedData、八个指标计算出的值,ip 可截取。只差 flowsSco
re
写方法RuleUtil.calculateAntiResult
加括号
RuleUtil.calculateAntiResult()
报红,没有 RuleUtil,创建。rulecompute businessprocess
右键新建 Scala Class Object,名为RuleUtil,
//用于实现爬虫识别逻辑的代码
Object RuleUtil{
}
引入RuleUtil.calculateAntiResult()
需要用很多数据,传入 ip、八个结果集、流程。缺少 ProcessedData,方法的名字是计算反爬虫的结果。样例是结果,封装最后返回值,返回值里要ip、八个结果的对应的值、flowsScore:Array、ProcessedDat
a,有 iP,八个结果返回值、flowsScore 可算出。
要ProcessedData
原始数据,第一个参数将ProcessedData messa
ge ip
数据传入。ipBlockCounts:Int
值为 map,用 ip 抽出。将计算的八个 map 放入第一个参数,每条数据和八个结果拿到后放到提取结果里。第一个 Map ipBlockCountMap
,第二个 ipCountsMap,第三个criticalPagesCountsMap
,第四个userAgentCountsMap
,第五个differentJourneysCountsMap
,第六个 ipCookCountMap,第七个 minTimeDiffMap,第八个LessDefaultTimesMap
粘贴。有了 Map、ip、ProcessedData 差广播变量,企业配置的8个指标阈值,广播变量在流程规则,复制粘贴 .value。爬虫识别所有的数据放到了此方法里。
//放回结果是最终的返回结果AntiCalculateResult
Ruleutil.calculateAntiResult(message,ip,ipBlockCountsMap,ipcountsMap,criticalPagescountsMap,userAgentCountsMap,differentJour
neysCountsMap,ipCookCountMap,minTimeDiffMap,lessDefaultTimesMap,broadcastFlowList.value)
创建方法,问号去掉,大括号补全
def calcufateAntiResult(message: ProcessedData
,ip:string,ipBloc
kCountsMap:collection.Map[string,Int],
ipCountsMap:collection.Map[String
,Int],
criticalPagesCountsMap:c
ollection.Map[String,Int],
userAgentCountsMap:collection.Map[string,Int],differentJourneysC
ountsMap:collection.Map[String ,Int],
ipCookCountMap:collectionMap[String,Int],minTimeDiffMap:collection.Map[string
,Int],
lessDefaultTimesMap:collectionMap[string,Int],value:ArrayBuffer[Flowcollocation):AntiCalculateResult
calcufateAntiResult 要拿到最终的返回结果 AntiCalculateResult,没有此结果,放 AntiCalculateResult{},数据为空后续封装需要的数据。
calcufateAntiResult 方法做爬虫识别的步骤
//爬虫识别
//1指标碰撞
//2最终打分
//3爬虫判断(结论:是/不是)
数据碰撞还未抽取数据,属于数据碰撞准备数据阶段。
三、指标碰撞的详细步骤
1目标:为打分算法准备数据
指标碰撞做分步,准备数据阶段和碰撞阶段。
此过程为准备数据,将一条数据在8个结果集内对应的指标值和企业端配置的8个指标阈值抽出。
碰撞数据阶段:
2思路与关键代码:准备数据
(1)提取一个 ip 在八个结果集内对应的数据,
ip 在8个结果中抽出
(2)将取出的数据封装为 Map,将 Map 与流程数据传入碰撞方法
企业端配置的8个指标阈值是8个结果集,拿到8个数字是零散的,需要打包到一起放入一个 Map,企业端配置的8个指标阈值在一个数据里。将打包好的 Map 里8个计算的结果和企业端配置的8个指标阈值传给指标碰撞,打分算法直接用。为了方便计算,结果封装为 Map 一起传入指标碰撞。
//1指标碰撞(准备数据)
//1.1提取一个 ip 在八个结果集内对应的数据,
//1.2将取出的数据封装为 Map,将 Map 与流程数据传入碰撞方法