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

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

开发者学堂课程【大数据实战项目 - 反爬虫系统(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月前
|
数据采集 人工智能 JSON
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
|
8月前
|
数据采集 NoSQL 关系型数据库
Python爬虫去重策略:增量爬取与历史数据比对
Python爬虫去重策略:增量爬取与历史数据比对
|
5月前
|
数据采集 存储 数据库
Python爬虫开发:Cookie池与定期清除的代码实现
Python爬虫开发:Cookie池与定期清除的代码实现
|
5月前
|
数据采集 监控 网络协议
基于aiohttp的高并发爬虫实战:从原理到代码的完整指南
在数据驱动时代,传统同步爬虫效率低下,而基于Python的aiohttp库可构建高并发异步爬虫。本文通过实战案例解析aiohttp的核心组件与优化策略,包括信号量控制、连接池复用、异常处理等,并探讨代理集成、分布式架构及反爬应对方案,助你打造高性能、稳定可靠的网络爬虫系统。
378 0
|
6月前
|
数据采集 Web App开发 JavaScript
Python爬虫解析动态网页:从渲染到数据提取
Python爬虫解析动态网页:从渲染到数据提取
|
8月前
|
数据采集 存储 缓存
Python爬虫与代理IP:高效抓取数据的实战指南
在数据驱动的时代,网络爬虫是获取信息的重要工具。本文详解如何用Python结合代理IP抓取数据:从基础概念(爬虫原理与代理作用)到环境搭建(核心库与代理选择),再到实战步骤(单线程、多线程及Scrapy框架应用)。同时探讨反爬策略、数据处理与存储,并强调伦理与法律边界。最后分享性能优化技巧,助您高效抓取公开数据,实现技术与伦理的平衡。
422 4
|
8月前
|
数据采集 云安全 人工智能
|
8月前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
8月前
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
8月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比