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

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

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

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


爬虫识别-指标碰撞-准备数据代码实现

内容介绍:

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

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

指标碰撞分为两部分,准备数据和指标碰撞。准备数据将数据抽出封装为 Map。为以下过程

image.png

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

//1指标碰撞(准备数据)

//1.1提取一个 ip 在八个结果集内对应的数据,

messageipipBlockCountsMapipCountsMapcriticalPagesCo

untsMapuserAgentCountsMapdifferentJourneysCountsMapipCookCountMapminTimeDiffMaplessDefaultTimesMap

ipBlockCountsMapkey ip 段,不是完整的 ip。后面是完整 ip,针对 ip 段单独处理,截取 ip 段,192.168.56.151 ip 段是192.168。获取第一个点的位置=ip.indexOf. 第二个点位置在 ip 找第二个点的位置,第一个点位置+1是第二个点位置

//192.168.56.151 -192.168

val one=ip.indexof(".")

val two=ip.indexof(str=".",one+1)

//截取 ip

val ipBlock=ip.字符号截取 substring,从0开始截取到two

val ipBlock=ip.substring(0,two)

//1.1提取一个 ip 在八个结果集内对应的数据,

抽取 ip 段,获取第一个8个结果数据,ipBlock

val ipBlockCounts=ipBlockCountsMap.getOrElse key

ipBlock,没有返回0

第二个 ip 的访问总量=ipCountsMap.getOrElse(ip,0)ip 作为 key 取出,有给值,没有给0

第三个关键页面访问次数

=criticalPagesCountsMap.getOrElse(ip,0)

第四个

userAgentCounts=userAgentCountsMap.getOrElse(ip,0)

第五个不同行程访问次数

=differentJourneysCountsMap.getOrElse(i

p,0)

第六个ipCookCount=ipCookCountMap.getOrElse(ip,0)

第七个最小时间间隔=minTimeDiffMap.getOrElse(ip,0)

第八个小于最小访问间隔=lessDefaultTimesMap.getOrElse(ip,0)

取出 ip 8个结果集的值

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)

 

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

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

取出的值封装为 Map,实例 Map,val dataParams=Map,值为8个结果,Map key valuevalue 是值。指标碰撞要将企业配置的值与算出的8个值对比,对比不能乱顺序,不能将 UA 的数量与不同行程对比,关键页面最小访问间隔次数与 ip 段数据对比。ip 访问量与 ip 访问量阈值对比,UA出现总量阈值与 UA 计算出的数据对比,一一对应不能乱序。

key 设置成与企业配置好的内容有关的,找到关系作为 key,数据直接放。

流程数据

image.png

是否选中不能区别,量不能区别,阈值不能区别,规则名字可以区别。名字是唯一的,ip 对应 ip 访问总量,UA 对应 UA 的数量,每个规则对应的名字是唯一的,以名字作为 key,key 对应的值放到后面,碰撞时,Map 拿到后数据计算的值 key 就是数据库中系统配置的八个指标如下

image.png

 

八个指标的名字传入,数据用 key 获取阈值,Map 计算出的结果由 key 获取,关系对应起来。

第一个 ipBlock 作为 keyvalue 获取ipBlockCounts

第二个 ip ip 的访问总量 ipCounts

第三个关键页面作为 key 获取关键页面的 Counts

第四个 userAgent 作为 key 获取 userAgentCounts

第五个 criticalCookies 作为 key 获取 ipCookCount

第六个不同行程的次数作为 key 获取 differentJourneysCounts

第七个关键页面最小访问时间间隔作为 key 获取 minTimeDiff

第八个criticalPagesLessThanDefault 作为 key 获取 lessDefaultT

Imes

将抽出的8个结果封装为 Map

val dataParams=Map(

"ipBlock"->ipBlockcounts,

"ip"->ipCounts,

"criticalPages"->criticalPagesCounts,

"userAgent"->userAgentCounts,

"criticalcookies"->ipCookcount,

"flightQuery"->differentJourneyscounts,

"criticalPagesAccTime"->minTimeDiff,

"criticalPagesLessThanDefault"->lessDefaultTimes

Map 与流程数据传入碰撞方法,用 calculateFlowsScore 碰撞方法,计算规则得分。

粘贴calculateFlowsScore,获取 Map dataParams,流程数据 flow ListdataParams 是数据计算出的8个结果,flowList 8个结果对应的阈值。

calculateFlowsScoredataParamsflowList

calculateFlowsScore 方法创建,calculateFlowsScore 报红。

AntiCalculateResult是反爬虫项目最终实现的目标,所有数据都封装到 AntiCalculateResult,有了 ipprocessedData、八个结果对应的数值,flowsScore 暂时不知道。复制粘贴修改,processedData 改为 messageipAccessCounts 改为 ipCountscriticalPageAccessC

ount 改为criticalPageCountscriticalCookies 改为 ipCookCount,

differentTripQuerysCounts改为

differentJourneysCounts,critivalPa

geMinInterval 改为

minTimeDiff,accessPageIntervalLessThanDef

ault 改为 lessDefaultTimes  

AntiCalculateResultmessage: ProcessedData

ip:string,

ipBlockCounts:Int,

ipCounts:Int,

criticalPagesCounts:Int,

userAgentCounts:Int,

minTimeDiff:Int

lessDefaultTimes:Int

differentJourneysCounts:Int,

ipCookCount:Int,

flowsScore:Array[FlowScoreResult])

封装结果都被使用,flowsScore:Array 类型FlowScoreResultFlowSc

oreResult 是封装流程的结果,应用到流程 ip、得分、阈值

最终返回结果缺少 flowsScore 参数

创建方法,放到最后,方法补全。

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

ayBuffer[Flowcollocation]):Unit ={

flowsScore报红,缺少 flowsScore 数据。calculateFlowsScore 方法的返回值为 flowsScore,类型为 Array[FlowScoreResult]

val flowsScore:Array[FlowScoreResult]=calculateFlowsScoredata

ParamsflowList

所有数据都返回,问题变为在calculateFlowsScore 碰撞,碰撞后返回flowsScore:Array[FlowScoreResult]类型的数据。

AntiCalculateResult 是最终想要返回的结果,所有数据的封装,数据准备阶段的处理方法写完。

相关文章
|
4天前
|
数据采集 数据可视化 数据挖掘
Python爬虫实战:抓取网站数据并生成报表
本文将介绍如何使用Python编写简单而高效的网络爬虫,从指定的网站上抓取数据,并利用数据分析库生成可视化报表。通过学习本文内容,读者将能够掌握基本的爬虫技术和数据处理方法,为日后开发更复杂的数据采集与分析工具打下坚实基础。
|
11天前
|
数据采集 存储 架构师
上进计划 | Python爬虫经典实战项目——电商数据爬取!
在如今这个网购风云从不间歇的时代,购物狂欢持续不断,一年一度的“6.18年中大促”、“11.11购物节”等等成为了网购电商平台的盛宴。在买买买的同时,“如何省钱?”成为了大家最关心的问题。 比价、返利、优惠券都是消费者在网购时的刚需,但在这些“优惠”背后已产生灰色地带。
|
2月前
|
数据采集 机器学习/深度学习 搜索推荐
探索数据之海——网络爬虫与数据抓取技术的应用与发展
在当今信息爆炸的时代,获取大量高质量的数据成为各行各业的迫切需求。网络爬虫和数据抓取技术作为一种有效的手段,正在被广泛应用于各个领域。本文将深入探讨网络爬虫的原理、应用场景以及未来的发展趋势,为读者带来关于数据抓取技术的全面了解。
173 5
|
2月前
|
数据采集 大数据 调度
利用aiohttp异步爬虫实现网站数据高效抓取
利用aiohttp异步爬虫实现网站数据高效抓取
|
2月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
15 0
|
2月前
|
数据采集 开发者 Python
Python爬虫实战:利用Beautiful Soup解析网页数据
在网络爬虫的开发过程中,数据解析是至关重要的一环。本文将介绍如何利用Python的Beautiful Soup库来解析网页数据,包括解析HTML结构、提取目标信息和处理特殊情况,帮助开发者更好地实现爬虫功能。
|
12天前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
10天前
|
数据采集 前端开发 JavaScript
Python爬虫之Ajax数据爬取基本原理#6
Ajax数据爬取原理【2月更文挑战第19天】
18 1
Python爬虫之Ajax数据爬取基本原理#6
|
11天前
|
数据采集 XML 数据处理
Python爬虫实战:利用BeautifulSoup解析网页数据
本文将介绍如何利用Python中的BeautifulSoup库来解析网页数据,帮助读者更好地开发爬虫程序,实现自动化数据采集与处理。
|
2月前
|
Web App开发 数据采集 JavaScript
【Python爬虫】<万物可爬>Selenium+自动化测试工具 获取数据
【1月更文挑战第22天】【Python爬虫】<万物可爬>Selenium+自动化测试工具 获取数据