爬虫识别-指标碰撞-代码实现| 学习笔记

简介: 快速学习爬虫识别-指标碰撞-代码实现

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

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


爬虫识别-指标碰撞-代码实现

内容介绍:

一、根据算法需求实例两个 ArrayBuffer

二、遍历流程数据,获取流程内的规则

三、获取规则内的阈值

四、获取数据计算出的结果

五、数据对比

 

一、根据算法需求实例两个 ArrayBuffer

def calculateFlowsScore(dataParams:Map[stringInt]flowList:Arr

ayBuffer[Flowcollocation]):ArrayBuffer[FlowScoreResult]={

val flowsScore=new ArrayBuffer[FlowscoreResult]()

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

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

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

image.png

规则可取消或选中,要求与选中与否无关的数据分数,分数是图片中后面的值,每一个指标有一个阈值,一个分数。如果数据中的值超过设置的值拿分数,没超过返回0。每个数据判断时都有值返回,如果数据大于值返回后面的分数,小于值返回0,八个指标经过八次判断,不管选中与否都判断。

结果集的大小一直是8,定义变量,所有数据 all,规则 Rule,分数Score List=new ArrayBuffer数据类型定义为 Double

最终算法复制粘贴

/**

* 通过算法计算打分

* 系数2权重:60%,数据区间:10-60

* 系数3权重:40,数据区间:0-40

* 系数2+系数3区间为:10-100

*系数1:平均分/10

*所以,factor1*(factor2+factor3)区间为:平均分--10 倍平均分

*@return

*/

defcomputeScore(scores:Array[Double],xa:Array[Double]):Double={

//打分列表

//总打分

valsum=scores.sum

//打分列表长度

val dim = scores.length

//系数 1:平均分/10

val factor1=sum/ (10 * dim)

//命中数据库开放规则的 score

//命中规则中,规则分数最高的

val maxlnXa=if (xa.isEmpty) {

0.0

}else{

xa.max

}

//系数2:系数2的权重是 60,指的是最高 score 6为分界,最高score 大于 6,就给

满权重60,不足6,就给对应的 maxlnXa*10

val factor2=if(1<(1.0/6.0)* maxlnXa){

60

}else{

(1.0/6.0) * maxlnXa * 60

//系数 3:打开的规则总分占总规则总分的百分比,系数3的权重是 40

val factor3=40*(xa.sum/sum)

/**

*系数2权重:60%,数据区间:10-60

*系数3权重:40,数据区间:0-40

*系数 2+系数3区间为:10-100

*系数1:平均分/10

*所以,factor1*(factor2+factor3)区间为:平均分--10 倍平均分

*/

factor1: (factor2+factor3)

}

打分算法给两个结果给分,要求传入 Double 类型,定义为 Double 类型

val allRuleScoreList=new ArrayBuffer[Double]()

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

//结果大小不定

必须是选中的,选定的数据值必须大于配置的值,大于要后面的分数,小于什么都不写。

定义必须是选择的 RuleScoreList

val selectRuleScoreList=new ArrayBuffer[Double]()

 

二、遍历流程数据,获取流程内的规则

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

流程 flowList,遍历 for 循环拿到 flow 来源于flowList,正常情况下只有一个 flowList,流程正常只有一个运行,其它是停止状态。

for(flow<-flowList){

//获取流程内的规则(8个)

流程数据结构图如下

image.png

横看,5分钟内 ip 访问量阈值为5分数是1此为一个流程。

flow.rules,rules 是流程里8个规则,做接收。

val rules=flow.rules

rules 是多个规则获得规则内的阈值需要做遍历

//遍历规则

for(rule<-rules){


三、获取规则内的阈值

//3获取规则内的阈值

数据库如下为存储的结果,正常情况下数据只有一个值,arg1大部分没有值,arg0大部分有值。

image.png

除了5分钟内小于最短访问间隔的关键页面查询次数都是一个值

真正存储数据在 arg0,只有 5分钟内小于最短访问间隔的关键页面查询次数是两个值。只有 rule_name=4有两个值,1-35-8 arg0没有数据。

image.png


每个流程通过rule.ruleValue0,大部分数据在ruleValue0rule_nam

e=4rule_real_name=criticalPagesLessThanDefault第一个参数是时间间隔,第二个是阈值。普通的阈值拿 arg0,rule_name=4rule_re

al_name=criticalPagesLessThanDefault arg1。数据中普通的拿arg0,rule_name=4 arg0

加判断只有rule_real_name=criticalPa

gesLessThanDefault 时拿第二个值,其它拿第一个。

if(rule.ruleName),传过来是ruleName,将rule_real_name 查出放入 ruleName,调用.equals=criticalPagesLessThanDefault时表示有两个参数的数据。两个数据时返回.ruleValue1是数据库中1,此情况下返回1否则返回ruleValue0

如果名字=criticalPagesLessThanDefault返回.ruleValue1否则返回 ruleValue0。定义变量 databasevalue 获取数据库里配置的阈值

//3获取规则内的阈值(企业内配置的规则的阈值)

val databaseValue=if(rule.ruleName.equals("criticalPagesLessTha

nDefault") rule.ruleValue1 else rule.ruleValue0

 

四、获取数据计算出的结果

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

数据中的结果是dataParams,当流程遍历到此规则时拿规则在 dat

aParams 对应的值。通过.get 获取 key,key 恰好是8个规则的名字。

8个规则的名字作为 key 将关系对应,获取 ruleName 数据库中配置的阈值,将ruleName数据库中计算的值取出做对比可做参考。定义变量 val dataValue。通过ruleName拿,拿不到给0

val dataValue=dataParams.getOrElse(rule.ruleName)

 

五、数据对比

//5数据对比

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

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

综合判断,如果数据结果 dataValue 大于数据库中的值 databaseV

alue ,不管选中与否如果数据中的值大于设置的阈值返回分数,反之返回0AllRuleScoreList 结果肯定有值,数据值大于阈值满足此要求返回分数,添加一个值.append,分数在规则里。每一条规则都有数值,获取分数.releScore。反之添加0

if(dataValue>databaseValue){

allRuleScoreList.append(rule.ruleScore)

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

allRuleScoreList.append(0)

满足选定的数据值必须大于配置的值,但没有做是否选定的判定。

//判断规则是否选中

如果选中将获取分数添加到选中的 List 里。如果规则状态.ruleStatu

s,ruleStatus的选中状态在 itcast_rule 设计表状态,0代表启用,1代表不启用,选中是启用,不选中是不启用。

image.png

ruleStatus=0是选中状态,数据分数大于数据库分数是 selectRuleSc

oreList,添加数据结果.append 分数

if(rule.rulestatus==0){

selectRuleScoreList.append(ruleruleScore

}

添加了allRuleScoreListselectRuleScoreList数据,

allRuleScoreList 不管选中与否大于值放入,小于给0allRuleScoreList指标加0selectRuleScoreList 指标没规定。

流程中与选定与否无关得分结果集、选定的得分结果集算完。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
2月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
15 0
|
9月前
|
数据采集 存储 JSON
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
猜谜游戏在编程语言实践都已经和 HelloWord 程序成为必不可少的新手实践环节,毕竟,它能够让我们基本熟悉 for 循环、变量定义、打印、if else 语句等等的使用,当我们基本熟悉该语言基础之后,就要学会其优势方面的程序实践,比如 Golang 所具备的爬虫及其并发优势。我们将采用彩云词典的英文单词翻译成中文的在线词典爬虫程序,及其改进版本,在并发上,我们将采用 SOCKS5 代理服务器的方式体验 Golang 语言的高并发易用性
55 0
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
|
12月前
|
数据采集 机器学习/深度学习 传感器
爬虫搜索算法附matlab代码
爬虫搜索算法附matlab代码
|
数据采集 人机交互 API
「Python」爬虫-7.验证码的识别
> 本文主要介绍如何处理一些网页中简单的验证码问题。~~(只提供简单的思路,随着技术的发展,一些验证码已经防范的非常好了,一般的解决方法可能过不了验证码这一关🤺~~
338 0
|
数据采集 SQL 消息中间件
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
快速学习数据预处理-历史爬虫判断-实现代码及效果
96 0
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
|
数据采集 监控 前端开发
数据预处理-历史爬虫判断-需求与实现思路|学习笔记
快速学习数据预处理-历史爬虫判断-需求与实现思路
83 0
数据预处理-历史爬虫判断-需求与实现思路|学习笔记
|
数据采集 算法 大数据
爬虫识别-总结及效果| 学习笔记
快速学习爬虫识别-总结及效果
156 0
爬虫识别-总结及效果| 学习笔记
|
4天前
|
数据采集 数据可视化 数据挖掘
Python爬虫实战:抓取网站数据并生成报表
本文将介绍如何使用Python编写简单而高效的网络爬虫,从指定的网站上抓取数据,并利用数据分析库生成可视化报表。通过学习本文内容,读者将能够掌握基本的爬虫技术和数据处理方法,为日后开发更复杂的数据采集与分析工具打下坚实基础。
|
3天前
|
数据采集 数据可视化 数据挖掘
使用Python编写Web爬虫实现数据采集与分析
在当今信息化时代,数据是企业发展和决策的重要依据。本文将介绍如何使用Python编写Web爬虫来实现对特定网站数据的自动采集,并结合数据分析技术,为读者展示如何利用爬虫技术获取有价值的信息并进行有效的数据处理和分析。
|
6天前
|
数据采集 存储 数据挖掘
Python 爬虫实战之爬拼多多商品并做数据分析
Python爬虫可以用来抓取拼多多商品数据,并对这些数据进行数据分析。以下是一个简单的示例,演示如何使用Python爬取拼多多商品数据并进行数据分析。