爬虫识别-指标碰撞-准备数据 avi| 学习笔记

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

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

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


爬虫识别-指标碰撞-准备数据 avi

目录:

一、判断是否为爬虫

二、爬虫识别实践

三、指标碰撞详细步骤

 

一、判断是否为爬虫

分为6

1、获取到封装好的 processedData 进行 map 操作,得到每一条访问数据

2、使用数据库流程策略、ip、和所有收集的 map 为指标碰撞准备数据

3、指标碰撞分析将数据计算的值与企业配置的阈值进行对比,为打分算法准备数据

4、打分算法接收数据返回分值

5、根据分值与最终阈值进行对比,判断是否是爬虫

6、最后将所有打分结果封装到AntiCalculateResult 中返回

六步可细化为三个部分,爬虫识别流程中的爬虫识别分指标碰撞、最终打分、爬虫判断三步。

//爬虫识别

//1指标碰撞

//2最终打分

//3爬虫判断(结论:是/不是)

 

二、爬虫识别实践

获取到封装好的 processedData 进行 map 操作,得到每一条访问数据

image.png

拿到八个结果,下一步在此批数据中拿到每一条数据。

image.png

截取数据中 ip,用 ip 截取八个结果对应的值与企业配置的八个阈值对比。

用此八个结果做数据碰撞,需要抽取数据。

image.png

 

拿到原始数据调用 map 拿到某一条数据,抽取 ip,将流程和八个结果放到一个方法做。

processedData 为原始数据,1-8步都使用了 processedData。一批数据进入processedData产生八个结果,再从 processedData 里拿出某一条数据。

processedData调用.map 操作,拿到一条数据。一条数据中获取数据中 ip,val ip=message.remoteAddr

processedData.map(message=>{

//获取数据中 ip

val ip=message.remoteAddr

ip、数据库中流程规则、八个结果三个数据为指标碰撞准备数据,不能都写到获取数据中 ip 否则代码很多、很大、很乱,放到独立的方法里,在方法里准备数据。

方法名字RuleUtil.calculateAntiResult 计算反爬虫结果

计算结果

case class AntiCalculateResult(processedData: ProcessedData

ip:String,

ipBlockCounts:Int,

ipAccessCounts: Int,

criticalPageAccessCounts: Int

userAgentCounts: Int

critivalPageMinInterval: Int

accessPageIntervalLessThanDefault:Int, differentTripQuerysCounts: Int

criticalCookies: Int

flowsScore:Array[FlowScoreResult])

最终返回样例列,将需要用到的所有数据封装完,ProcessedDataip、八个指标ipBlockCounts:Int, ip 段对应的值、ipAccessCounts: Int,ip 访问总量对应的值、criticalPageAccessCounts: IntuserAgent

Counts: IntcritivalPageMinInterval:Int

accessPageIntervalLessTha

nDefault:Int, differentTripQuerysCounts: IntcriticalCookies: Int,)

ProcessedData、八个指标计算出的值,ip 可截取。只差 flowsSco

re

写方法RuleUtil.calculateAntiResult 加括号

RuleUtil.calculateAntiResult()

报红,没有 RuleUtil,创建。rulecompute businessprocess 右键新建 Scala Class Object,名为RuleUtil,

image.png

//用于实现爬虫识别逻辑的代码

Object RuleUtil{

}

引入RuleUtil.calculateAntiResult()

需要用很多数据,传入 ip、八个结果集、流程。缺少 ProcessedData,方法的名字是计算反爬虫的结果。样例是结果,封装最后返回值,返回值里要ip、八个结果的对应的值、flowsScore:ArrayProcessedDat

a, iP,八个结果返回值、flowsScore 可算出。

ProcessedData原始数据,第一个参数将ProcessedData messa

ge ip数据传入。ipBlockCounts:Int值为 map, ip 抽出。将计算的八个 map 放入第一个参数,每条数据和八个结果拿到后放到提取结果里。第一个 Map ipBlockCountMap,第二个 ipCountsMap,第三个criticalPagesCountsMap,第四个userAgentCountsMap,第五个differentJourneysCountsMap,第六个 ipCookCountMap,第七个 minTimeDiffMap,第八个LessDefaultTimesMap粘贴。有了 MapipProcessedData 差广播变量,企业配置的8个指标阈值,广播变量在流程规则,复制粘贴 .value。爬虫识别所有的数据放到了此方法里。

//放回结果是最终的返回结果AntiCalculateResultRuleutil.calculateAntiResult(message,ip,ipBlockCountsMap,ipcountsMap,criticalPagescountsMap,userAgentCountsMap,differentJourneysCountsMap,ipCookCountMap,minTimeDiffMap,lessDefaultTimesMap,broadcastFlowList.value)

创建方法,问号去掉,大括号补全

def calcufateAntiResult(message: ProcessedDataip:stringipBloc

kCountsMap:collection.Map[string,Int],

ipCountsMap:collection.Map[StringInt]

criticalPagesCountsMap:c

ollection.Map[String,Int],userAgentCountsMap:collection.Map[string,Int],differentJourneysC

ountsMap:collection.Map[String ,Int],ipCookCountMap:collectionMap[String,Int],minTimeDiffMap:collection.Map[stringInt],lessDefaultTimesMap:collectionMap[string,Int],value:ArrayBuffer[Flowcollocation):AntiCalculateResult

calcufateAntiResult 要拿到最终的返回结果 AntiCalculateResult,没有此结果,放 AntiCalculateResult{},数据为空后续封装需要的数据。

calcufateAntiResult 方法做爬虫识别的步骤

//爬虫识别

//1指标碰撞

//2最终打分

//3爬虫判断(结论:是/不是)

数据碰撞还未抽取数据,属于数据碰撞准备数据阶段。

 

三、指标碰撞的详细步骤

1目标:为打分算法准备数据

指标碰撞做分步,准备数据阶段和碰撞阶段。

image.png

此过程为准备数据,将一条数据在8个结果集内对应的指标值和企业端配置的8个指标阈值抽出。

碰撞数据阶段:

image.png

2思路与关键代码:准备数据

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

ip 在8个结果中抽出

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

企业端配置的8个指标阈值是8个结果集,拿到8个数字是零散的,需要打包到一起放入一个 Map,企业端配置的8个指标阈值在一个数据里。将打包好的 Map 8个计算的结果和企业端配置的8个指标阈值传给指标碰撞,打分算法直接用。为了方便计算,结果封装为 Map 一起传入指标碰撞。

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

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

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

相关文章
|
7月前
|
数据采集 NoSQL 关系型数据库
Python爬虫去重策略:增量爬取与历史数据比对
Python爬虫去重策略:增量爬取与历史数据比对
|
5月前
|
数据采集 Web App开发 JavaScript
Python爬虫解析动态网页:从渲染到数据提取
Python爬虫解析动态网页:从渲染到数据提取
|
7月前
|
数据采集 存储 缓存
Python爬虫与代理IP:高效抓取数据的实战指南
在数据驱动的时代,网络爬虫是获取信息的重要工具。本文详解如何用Python结合代理IP抓取数据:从基础概念(爬虫原理与代理作用)到环境搭建(核心库与代理选择),再到实战步骤(单线程、多线程及Scrapy框架应用)。同时探讨反爬策略、数据处理与存储,并强调伦理与法律边界。最后分享性能优化技巧,助您高效抓取公开数据,实现技术与伦理的平衡。
334 4
|
7月前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
7月前
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
7月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
494 6
|
7月前
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
980 31
|
6月前
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重
|
7月前
|
数据采集 XML 存储
Headers池技术在Python爬虫反反爬中的应用
Headers池技术在Python爬虫反反爬中的应用