爬虫识别-总结及效果| 学习笔记

简介: 快速学习爬虫识别-总结及效果

开发者学堂课程【大数据实战项目 - 反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第六阶段爬虫识别-总结及效果】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/674/detail/11724


爬虫识别-总结及效果

内容介绍:

一.前期准备

二.指标碰撞

三.最终打分

四.爬虫判断

五.测试

 

一.前期准备

之前已经将代码全部写完,但是最后做的是爬虫判断,并不是完整的过程。

爬虫识别需要进行三个部分:指标碰撞,最终打分,爬虫判断。

指标碰撞分为准备数据和最终碰撞。

指标碰撞之前拿到的是8个结果集(如图所示),即 IP 段访问量,某 IP 5分钟内访问总量,某 IP 5分钟内关键页访问总量,某 IP 5分钟内的 UA 种类数统计,5,6,7,8

image.png

准备数据

1.提取一个 ip 在八个结果集内对应的数据。

关键代码:

Val ipBlockCounts=ipBlockCountsMap.getOrElse(ipBlock,0)

Val ipCounts=ipCountsMap.getOrElse(ip,0)

Val criticalPagesCounts=criticalPagesCountsMap.getOrElse(ip,0)

Val userAgentCounts=userAgentCountsMap.getOrElse(ip,0)

Val differentJourneysCounts=differentJourneysCountsMap.getOrElse(ip.0)

Val ipCookCount=ipCookCountMap.getOrElse(ip,0)

Val minTimeDiff=minTimeDiffMap.getOrElse(ip,0)

Val lessDefaultTimes=lessDefaultTimesMap.getOrElse(ip,0)

先在数据中找出 IP ,然后将 IP 8个数据结果放在一个方法中,

在方法中用 IP 提取出8个结果对应的值。

2.将取出的数据封装为 Map ,将次 Map 与流程数据传入碰撞方法

关键代码:

Val dataParams=Map(

ipBlock->ipBlockCounts,

ip->ipCounts,

criticalPages->criticalPagesCounts,

userAgent->userAgentCounts,

criticalCookies->ipCookCounts,

flightQuery->differentJourneysCounts,

criticalPagesAccTime->minTimeDiff,

criticalPagesLessThanDefault->lessDefaultTimes

)

 image.png

即拿到图中所示的,一条数据在8个结果集内对应的指标值和企业端配置的8个指标阈值。

注意:放在这里面以后, 需要知道 Map K, K 取决于后面如何进行计算,要将企业端配置的8个指标阈值和一条数据在8个结果内对应的指标值进行对比,而要对比就要有对等关系,要进行比较的两组数据必须是一一对等的关系,将数据库中每个规则的名字作为 K ,而和它进行对比的值则是通过 K 计算得到的值。依次类推,将数据一组一组的输入 Map 中,方便后续计算。准备数据就是准备出一个 Map,然后再进行后续的碰撞。

 

二.指标碰撞

1.根据算法需求实例两个 ArrayBuffer

(这两个碰撞的结果是为后续打分算法做准备的,指标数据就是为打分算法准备数据的。既然需要这两个数据:与选定与否无关得分结果集和选定的得分结果集,我们就去准备这两个数据。)

//一个选定与否无关的数据分数,若数据的值大于设置的阈值那么返回数据的分数,反之返回0

//结果集的大小一直是8

Val allRuleScoreList=new ArrayBuffer[Double]()

//一个必须是选定状态的并且数据的结果大于配置的阈值返回分数,反之不做返回

//结果集的大小不定

Val selectRuleScoreList=new ArrayBuffer[Double]()

2.遍历流程数据,获取流程内的规则

for(flow<-flowList){

//获取流程内的规则(8个)(拿到这8个规则后再遍历规则,遍历出每一个规则,找到每一个规则里面对应的数据里面配置好的阈值。)

Val rules=flow.rules

}

3.获取规则内的阈值

Val databaseValue=if(rule.ruleName.equals(criticalPagesLessThanDefault))

rule.ruleValuel else rule.ruleValue0

其中 ruleName 十分特殊,它有两个参数,第一个是最小时间差,第二个才是阈值。所以,如果需要 ruleName ,就取第二个作为阈值,否则就取第一个,因为其它的7个就只有一个即 Value0。根据情况返回了阈值。数据库的阈值有了,然后再从 Map 中拿出数据计算出来的结果。

4.获取数据计算出的结果

Val dataValue= dataParams.getOrElse(ruleName,0)

5.数据对比

如果数据中的值大于系统里配备的值,那么就将相应的结果塞入Map 中。然后根据这两种情况://一个选定与否无关的数据分数,若数据的值大于设置的阈值那么返回数据的分数,反之返回0 //一个必须是选定状态的并且数据的结果大于配置的阈值返回分数,反之不做返回,进行塞数据。

//结果集的大小一直是8

数据计算的结果大于阈值,根据需求将分数写入对应的 ArrayBuffer

数据计算的结果小于阈值,根据需求填入ArrayBuffer (是否需要填写)

If(dataValue>databaseValue){

allRuleScoreList.append(rule.ruleScore)

//判断规则是否选中

If(rule.ruleStatus==0){

selectRuleScoreList.append(rule.ruleScore)

}

}else{//反之 数据计算的结果小于阈值

allRuleScoreList.append(0)

}

至此,数据准备阶段完成,打分算法所需的数据已准备完毕。

 

三.最终打分

目标:根据已有数据计算最终分数,并返回分值

思路与关键代码:

1. 将两个结果集传入算法,算法自动返回一个分值

Val flowScore=computeScore(allRuleScoreList.toArray,selectRuleScoreList.toArray)

有了分数就可以去判断,是否是爬虫了。

 

.爬虫判断

目标:得出是否是爬虫的结论。 “True” 或 “False

在我们的流程当中,最后一步配置策略中有“黑名单阈值”,它表示的是:是否是爬虫,如果大于这个值就是爬虫,小于这个值就不是爬虫。获取出这个黑名单阈值后,将计算数据出的分数与黑名单阈值进行对比,大于它就返回 True, 小于就返回 False.

image.png

即如图所示的流程。

思路与关键代码:

1.将获取流程中最终的阈值(爬虫与非爬虫的分界点)

val flowLimitScore=flow.flowLimitScore

2.用数据得分与最终阈值对比

若数据得分大于最终阈值,那么次数据是爬虫,返回 True

若数据得分小于最终阈值,那么次数据不是爬虫,返回False

Val isUpLimited=if(flowScore>flowLimitScore)true else false

在流程的最后一步中,如果大于黑名单阈值,则是爬虫;如果不大于黑名单阈值,则不是爬虫。

 

五.测试

// 最终的打分

Val flowScore= computeScore(allRuleScoreList.toArray)

If (flowScore>0){

Println(>>>>>-----> 数据得分:”+flowScore)  //做判断,看一下分数,分数要大于0才能输出。

//3.2用数据得分与最终阈值对比

//若数据得分大于最终阈值,那么次数据是爬虫,返回 True

//若数据得分小于最终阈值,那么次数据不是爬虫,返回 False

Val isUpLimited=if(flowScore>flowLimitScore)true else false

If(isUpLimited){

println(>>>>>=====> True)  //做判断

这里面,它有可能是爬虫也有可能不是爬虫,在这里做一个判断。如果是,就输出 True

执行时应先执行数据预处理,再执行爬虫。

image.png

执行后,如图所示即可看到最终得分

image.png

将黑名单阈值改为20后再次运行,由于22.5>20,所以运行结果为 “True” 是爬虫,至此,爬虫识别完成。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
数据采集 人机交互 API
「Python」爬虫-7.验证码的识别
> 本文主要介绍如何处理一些网页中简单的验证码问题。~~(只提供简单的思路,随着技术的发展,一些验证码已经防范的非常好了,一般的解决方法可能过不了验证码这一关🤺~~
338 0
|
数据采集 SQL 消息中间件
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
快速学习数据预处理-历史爬虫判断-实现代码及效果
96 0
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
|
数据采集 监控 前端开发
数据预处理-历史爬虫判断-需求与实现思路|学习笔记
快速学习数据预处理-历史爬虫判断-需求与实现思路
83 0
数据预处理-历史爬虫判断-需求与实现思路|学习笔记
|
数据采集 存储 消息中间件
爬虫识别-准备离线计算数据| 学习笔记
快速学习爬虫识别-准备离线计算数据
139 0
爬虫识别-准备离线计算数据| 学习笔记
|
数据采集 大数据 数据库
爬虫识别-指标碰撞-准备数据代码实现| 学习笔记
快速学习爬虫识别-指标碰撞-准备数据代码实现
121 0
爬虫识别-指标碰撞-准备数据代码实现| 学习笔记
|
数据采集 算法 大数据
爬虫识别-指标碰撞-准备数据 avi| 学习笔记
快速学习爬虫识别-指标碰撞-准备数据 avi
127 0
爬虫识别-指标碰撞-准备数据 avi| 学习笔记
|
数据采集 算法 NoSQL
爬虫识别-指标碰撞-实现思路| 学习笔记
快速学习爬虫识别-指标碰撞-实现思路
77 0
|
4天前
|
数据采集 数据可视化 数据挖掘
Python爬虫实战:抓取网站数据并生成报表
本文将介绍如何使用Python编写简单而高效的网络爬虫,从指定的网站上抓取数据,并利用数据分析库生成可视化报表。通过学习本文内容,读者将能够掌握基本的爬虫技术和数据处理方法,为日后开发更复杂的数据采集与分析工具打下坚实基础。
|
3天前
|
数据采集 数据可视化 数据挖掘
使用Python编写Web爬虫实现数据采集与分析
在当今信息化时代,数据是企业发展和决策的重要依据。本文将介绍如何使用Python编写Web爬虫来实现对特定网站数据的自动采集,并结合数据分析技术,为读者展示如何利用爬虫技术获取有价值的信息并进行有效的数据处理和分析。
|
6天前
|
数据采集 存储 数据挖掘
Python 爬虫实战之爬拼多多商品并做数据分析
Python爬虫可以用来抓取拼多多商品数据,并对这些数据进行数据分析。以下是一个简单的示例,演示如何使用Python爬取拼多多商品数据并进行数据分析。