爬虫识别-IP 统计需求及代码及效果|学习笔记

简介: 快速学习爬虫识别-IP 统计需求及代码及效果。

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第五阶段爬虫识别-IP 统计需求及代码及效果】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/673/detail/11698


爬虫识别-IP 统计需求及代码及效果

 

内容介绍:

一、需求

二、设计

三、实践

四、思路

五、执行效果

六、总结

 

一、需求

IP 段访问总量计算完毕

//2 按 IP 地址聚合-某个 IP,5分钟范围内访问量

某个 IP,5分钟内总访问量

计算某个IP在5分钟的访问量,是否为爬虫。八个指标都是爬虫具备的特性,5分钟范围内 IP 数量越多,是爬虫的可能性越大。

普通人查询5分钟内查10-20次,如果是爬虫次数非常多。根据访问总量,企业系统内设置针对5分钟范围内 IP 访问总量指标的阈值。如果数据计算出的结果超过设置的阈值,那么很可能是爬虫。

5分钟内的 IP 访问量设置为100,正常用户访问总量超过100可能性不大,爬虫很容易超过。

 

二、设计

获取数据,IP 段统计数量,截取 IP 段,做 wordcount。计算 IP 出现多少次,直接拿 IP 做 wordcount

1、拿到 kafka 数据,获取数据

2、统计 remoteaddress 的 wordcount

 

三、实践

拿代码 CoreRule.ipCounts() 方法为空,传入数据 processedData

CoreRule.ipCounts(processedData)

流程如下:

 image.png

第一个算完,第二个还在此批数据读出,数据要用很多次。

创建方法

image.png

代码补全

def ipBlockCounts(processedData:DStream[ProcessedData]):Unit=

此代码做第二个功能,按 IP聚合,统计某个 IP,5分钟内访问总量

复制粘贴放到最后

 

四、思路

1、抽取出数据中的 IP

2、将 ip 作为 key,1作为 value,输出

3、调用 reduceByKeyAndWindow 计算最终每个ip的总量

4、将最终数据转换为Map,便于后续提取、使用。

1、抽取出数据中的 IP

ProcessedData.map(message)=>{

//抽取出数据中的 IP

val ip=message.remoteAddr

拿到数据抽取出 IP .map 一条数据,此数据做遍历。val ip=message 直接调用.remoteAdder 为 IP

2、将 ip 作为 key,1作为 value,输出

(ip,1)返回结束

3、调用 reduceByKeyAndWindow 计算最终每个ip的总量

reduceByKeyAndWindow 求总量,两个数据a和b,a和b设置类型为 Int,做a+b操作。第一个参数窗口的长度 Seconds 6秒钟,第二个参数 Seconds 2秒钟滑动周期

}).reduceByKeyAndWindow((a:Int,b:Int)=>a+b,Seconds(6)seconds(2))//调用 reduceByKeyAndwindow计算最终每个ip的总量

前面定义变量接收,返回,变量为 ipblockCounts,ipblockCounts 返回

val ipCounts=ProcessedData.map(message)=>{

ipCounts

}

代码写完前面做接收,某个 IP 总数计算完毕。

val ipCounts=CoreRule.ipCounts(processedData)

4、将最终数据转换为Map,便于后续提取、使用。

定义 ipCountsMap=null 遍历 map

ipblockCounts.foreachRDD(rdd=>{

rdd 转换为 map

rdd.collectAsMap()

数据类型[String,Int],String 为 IP,Int是值。数据类型给 ipCountsMap

复制粘贴到 rdd.collectAsMap() 报红,将 val 改为 var

var ipBlockCountsMap :collection.Map[string,Int] =null

ipBlockCountsMap=rdd.collectAsMap()

 

五、执行效果

ipBlockCounts.foreachRDD(rdd=>rdd.foreach(println)

跑起来应该是一个 IP 和数量,没有做截取。执行,数据预处理程序跑起来、爬虫识别跑起来,会输出 IP 和总数。

19/05/17 17:20:50 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

19/05/17 17:20:50 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

(192.168.100.2,5)

192.168.100.2 为 IP,5为访问总数。一秒钟跑一次,窗口宽度6秒钟,出现5可能6秒钟恰好跨在两个1秒钟中间。

爬虫停止,5分钟范围内 IP 访问总量,执行6秒钟改为5分钟即可。

 

六、总结

1、抽取出数据中的 IP

val ip=message.remoteAddr

2、将 ip 作为 key,1作为 value,输出

(ip,1)

3、调用 reduceByKeyAndWindow 计算最终每个 ip 的总量

.reduceByKeyAndwindow((a:Int,b:Int)=>a+b,Seconds(6)seconds(2))

4、将最终数据转换为Map,便于后续提取、使用。

var ipBlockCountsMap :collection.Map[string,Int] =null

ipblockCounts.foreachRDD(rdd=>{

ipBlockCountsMap=rdd.collectAsMap()

})

截取 IP,将 ip 作为 key,1作为 value,输出,调用 reduceByKeyAnd

Window 为 IP 出现的次数。与 wordcount 一样

reduceByKeyAndWindow 适用场景,计算频繁短时间内计算大时间范围数据,30s计算5分钟

相关文章
|
3月前
|
数据采集 运维 监控
构建企业级Selenium爬虫:基于隧道代理的IP管理架构
构建企业级Selenium爬虫:基于隧道代理的IP管理架构
|
2月前
|
数据采集 人工智能 JSON
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
|
3月前
|
数据采集 消息中间件 NoSQL
分布式爬虫的全局请求间隔协调与IP轮换策略
分布式爬虫的全局请求间隔协调与IP轮换策略
|
5月前
|
数据采集 存储 数据库
Python爬虫开发:Cookie池与定期清除的代码实现
Python爬虫开发:Cookie池与定期清除的代码实现
|
7月前
|
数据采集
Haskell编程中,利用HTTP爬虫实现IP抓取
以上就是利用Haskell编写IP抓取爬虫的详细步骤。希望这篇文章的演示对于理解在Haskell这种函数式编程语言中如何实现网络爬虫有所帮助,而其中的网络访问、标签解析和列表处理等技术在许多其他的问题中都有广泛的应用。
180 26
|
5月前
|
数据采集 监控 网络协议
基于aiohttp的高并发爬虫实战:从原理到代码的完整指南
在数据驱动时代,传统同步爬虫效率低下,而基于Python的aiohttp库可构建高并发异步爬虫。本文通过实战案例解析aiohttp的核心组件与优化策略,包括信号量控制、连接池复用、异常处理等,并探讨代理集成、分布式架构及反爬应对方案,助你打造高性能、稳定可靠的网络爬虫系统。
378 0
|
5月前
|
数据采集 机器学习/深度学习 边缘计算
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
本文详解爬虫代理设置常见报错场景及解决方案,涵盖IP失效、403封禁、性能瓶颈等问题,提供动态IP代理的12种核心处理方案及完整代码实现,助力提升爬虫系统稳定性。
393 0
|
6月前
|
数据采集 机器学习/深度学习 Web App开发
Python爬虫如何应对贝壳网的IP封禁与人机验证?
Python爬虫如何应对贝壳网的IP封禁与人机验证?
|
7月前
|
数据采集 运维 监控
Serverless爬虫架构揭秘:动态IP、冷启动与成本优化
随着互联网数据采集需求的增长,传统爬虫架构因固定IP易封禁、资源浪费及扩展性差等问题逐渐显现。本文提出基于Serverless与代理IP技术的新一代爬虫方案,通过动态轮换IP、弹性调度任务等特性,显著提升启动效率、降低成本并增强并发能力。架构图与代码示例详细展示了其工作原理,性能对比数据显示采集成功率从71%提升至92%。行业案例表明,该方案在电商情报与价格对比平台中效果显著,未来有望成为主流趋势。
285 0
Serverless爬虫架构揭秘:动态IP、冷启动与成本优化
|
6月前
|
数据采集 Python
解决requests爬虫IP连接初始问题的方案。
通过上述技艺,爬虫程序的调试和优化将变得十分高效,最妙的是,这些技术诀窍不仅可以帮你避开网络世界里的雷区,更能让你在数据抓取的战场上游刃有余。
112 0