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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
数据可视化DataV,5个大屏 1个月
简介: 快速学习爬虫识别-指标碰撞-代码实现

开发者学堂课程【大数据实战项目 - 反爬虫系统(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 指标没规定。

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

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
6月前
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
68 1
|
6月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
70 0
|
6月前
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
405 0
|
2月前
|
数据采集 编解码
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
|
3月前
|
数据采集 存储 JSON
推荐3款自动爬虫神器,再也不用手撸代码了
推荐3款自动爬虫神器,再也不用手撸代码了
|
5月前
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
181 3
|
5月前
|
数据采集
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
56 0
|
6月前
|
数据采集 Web App开发 文字识别
Python爬虫之点触验证码的识别
点触验证码识别思路,初始化,获取,识别。
182 0
Python爬虫之点触验证码的识别
|
6月前
|
数据采集 文字识别 开发者
Python爬虫之图形验证码的识别
python爬虫逆向图形验证码分析,处理和测试实战。
144 0
|
6月前
|
数据采集 存储 JSON
解析Perl爬虫代码:使用WWW::Mechanize::PhantomJS库爬取stackoverflow.com的详细步骤
在这篇文章中,我们将探讨如何使用Perl语言和WWW::Mechanize::PhantomJS库来爬取网站数据。我们的目标是爬取stackoverflow.com的内容,同时使用爬虫代理来和多线程技术以提高爬取效率,并将数据存储到本地。
下一篇
无影云桌面