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

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

开发者学堂课程【大数据实战项目 - 反爬虫系统(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 是最终想要返回的结果,所有数据的封装,数据准备阶段的处理方法写完。

相关文章
|
2月前
|
数据采集 API 数据处理
Objective-C 音频爬虫:实时接收数据的 didReceiveData: 方法
Objective-C 音频爬虫:实时接收数据的 didReceiveData: 方法
|
10天前
|
数据采集 安全 定位技术
使用代理IP爬虫时数据不完整的原因探讨
在信息化时代,互联网成为生活的重要部分。使用HTTP代理爬取数据时,可能会遇到失败情况,如代理IP失效、速度慢、目标网站策略、请求频率过高、地理位置不当、网络连接问题、代理配置错误和目标网站内容变化等。解决方法包括更换代理IP、调整请求频率、检查配置及目标网站变化。
41 11
|
29天前
|
数据采集 JSON JavaScript
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
本文介绍了如何使用PHP模拟表单提交并结合代理IP技术抓取京东商品的实时名称和价格,特别是在电商大促期间的数据采集需求。通过cURL发送POST请求,设置User-Agent和Cookie,使用代理IP绕过限制,解析返回数据,展示了完整代码示例。
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
|
1月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
81 0
|
2月前
|
消息中间件 数据采集 数据库
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
37 1
|
2月前
|
数据采集 Web App开发 JSON
爬虫实战小案例—获取喜马拉雅账号的关注数据和粉丝数据生成电子表格并实现批量关注或者取关然后生成表格文件
爬虫实战小案例—获取喜马拉雅账号的关注数据和粉丝数据生成电子表格并实现批量关注或者取关然后生成表格文件
65 0
|
2月前
|
数据采集
爬虫案例—抓取找歌词网站的按歌词找歌名数据
爬虫案例—抓取找歌词网站的按歌词找歌名数据
58 0
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
113 6
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
232 4
|
4月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。