爬虫识别-IP 段统计-代码实现及效果|学习笔记

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

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

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


爬虫识别-IP段统计-代码实现及效果

 

目录:

一、IP 段统计代码实现

二、执行效果

 

一、IP 段统计代码实现

5分钟时间范围内 IP 的访问量思路已经写完

object coreRule {

//1 按 IP 段聚合 -5分钟内的 IP 段(IP 前两位)访问量

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

//抽取出数据中的 IP

数据在 processedData 里面的类型是 processedData,拿到数据调用 foreach 或 map 取决于要不要返回数据,在需求中需要返回数据,方法调用需要拿到结果,调用 map。

map 拿到一条一条数据 message,拿到数据抽取数据中的 IP。message 类型为 ProcessedD

ata,ProcessedData 里面是样例类,直接调用点,message. 第一个 remoteAddr 是用户端上的 IP,serverAddr 服务器端。使用用户端,拿到用户 IP 接收。

 image.png

ProcessedData.map(message)=>{

//抽取出数据中的 IP

val ip=message.remoteAddr

//截取出 ip 的前两位 

以192.168.56.151为例,IP 端为196.168。

通过点的方式截取,第一个点直接 index,最后一个点 last index,中间点如果通过截取长度,长度不一定不可以。

定一个变量 one 第一个点位置,通过第一个点找到第二个点位置,通过位置找。第一个点在 IP 当中.indexOf.

定一个变量 two 在 IP 当中.indexOf 第二个点,第一个点位置+1为第二个点位置。

IP 端截取用 IP.substring 从0开始截到第二个点位置,定变量 ipblock

//192.168.56.151 196.168

//获得到第一个.的位置

val one =ip.indexof(".")

//获得到第二个.的位置

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

//ip段的截取

val ipblock= ip.substring(0,two)

//将前两位作为 key,1作为 value 输出

IP 段 ipblock,1作为 value 输出。

调用 map 循环遍历,有多条数据输出多个值,拿到 key value list,需求是 IP 段被访问的总量类似于单词出现了多少次,直接调用 reduceByKey,key 为 IP 段,1为 value,调用 reduceByKey 可以拿到。 

//调用 reduceByKeyAndWindow 计算最终每个ip段的总量

调用 reduceByKey 不行,只是批次的计算,时间范围在5分钟内,需求在很短时间范围内周期性计算大的时间段内的业务需求,用 reduceByKeyAndWindow 需要传入窗口,设置。

参数 reduceByKey 两位数求和,先有两位数a和b,a和b设置类型为 Int,做a+b操作。

报红因为缺少函数参数,窗口函数业务需求5分钟内而不是2秒中迭代一次,传入窗口宽度参数暂时6秒钟,滑动窗口的步长2秒。

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

val ipBlockCounts=processedData.map(message=>{

//抽取出数据中的 IP

val ip= message.remoteAddr

//截取出 ip 的前两位

//192.168.56.151 192.168

//获得到第一个.的位置

val one =ip.indexof(".")

//获得到第二个.的位置

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

//ip 段的截取

val ipblock= ip.substring(0,two)

//将前两位作为 key,1作为v alue,输出

(ipblock,1)

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

ipBlockcounts

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

方法定义变量进行接收叫做 ipblockCounts 刚刚计算的结果转换为 map。

 image.png

计算 IP 段总量,拿到 IP 段数量、某一 IP 总数,计算的结果是 IP 和量两个值,一个 key 为 IP,value 为 IP 对应总量数。

IP 量计算出后拿到每一条数据抽出 IP,每个 map 找 IP,要获取 IP 对应的值、总数。封装为 map 后 key 是 IP,value 是值,拿到 IP 去 key 很方便拿到。为了方便后续计算转换为 map

定义 ipblockCountsMap 给空的 null 做接收,循环.ipblockCounts.f

oreachRDD,一个 rdd 里面。调用 rdd.collectAsMap 将 rdd 转化为 map。数据类型为 collection.Map,复制到声明的 map,有了数据类型由 ipblockCountsMap 接收=rdd.collectAsMap。报红,将 val 改为 var。

定义了 map,接收了 rdd 转化的 map。计算通过 IP 截取时 map key 是 String,String 为 IP,Int 是值,拿到 IP get 即可。最终数据转换为 map 以便后期提取使用。

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

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

ipBlockCounts.foreachRDD(rdd=>{

ipBlockCountsMap=rdd.collectAsMap()

})

 

二、执行效果

map 输出

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

打出了 ipBlock 数据,哪个 IP 段,IP 段数据是多少。

执行,数据预处理程序跑起来、爬虫数据跑起来,会输出 IP 段和数字。

19/05/17 16:37:14 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

19/05/17 16:37:14 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

(192.168.6)

IP 段和数量出现,第一个指标统计 IP 段访问量统计完毕,IP 段没问题,窗口的宽度是6秒钟,要计算的是6秒钟之间的数据,每两秒钟跑一次,爬虫是1秒钟跑一次,窗口为6秒钟,1秒钟跑6次,结果6没问题。IP 段,6正确。

 image.png

第一个指标5分钟内 IP 段访问量做完,代码写完,效果看到,数据正确

相关文章
|
8月前
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
457 0
|
数据采集 安全 数据中心
爬虫应该选择住宅ip代理还是数据中心代理?
爬虫应该选择住宅ip代理还是数据中心代理?
爬虫应该选择住宅ip代理还是数据中心代理?
|
4月前
|
数据采集 中间件 定位技术
新手爬虫er必刷!如何使用代理IP全攻略!
在爬虫开发中,代理IP是规避IP封锁和请求频率限制的重要工具,通过分散请求压力并模拟不同地理位置,提高数据抓取稳定性和成功率。本文详细介绍了代理IP的基本概念、选择服务的关键因素、获取及使用方法,包括Python中的Requests库和Scrapy框架的具体应用,以及IP管理与轮换策略,帮助新手掌握代理IP的使用技巧。
|
5月前
|
数据采集
爬虫抓取数据过程中代理IP频繁掉线:以Kookeey为例的解决方案
在数据抓取过程中,代理IP不可或缺,但其频繁掉线问题严重影响效率。本文以Kookeey为例,探讨解决之道:1)深入理解掉线原因,审慎选择稳定的服务商; 2)保持代理IP更新并合理配置使用参数; 3)在程序中集成错误处理与重试逻辑; 4)必要时升级至更优质的服务; 5)主动与服务商沟通寻求支持; 6)探索替代抓取策略,如调整抓取节奏或采用分布式架构。这些措施有助于显著提升抓取成功率及稳定性。
|
5月前
|
数据采集 XML 前端开发
Python爬虫实战:利用代理IP爬取百度翻译
Python 爬虫实战:利用代理 IP 爬取百度翻译
239 2
|
数据采集 存储 安全
Python爬虫实战:利用代理IP爬取某瓣电影排行榜并写入Excel(附上完整源码)
Python爬虫实战:利用代理IP爬取某瓣电影排行榜并写入Excel(附上完整源码)
233 0
Python爬虫实战:利用代理IP爬取某瓣电影排行榜并写入Excel(附上完整源码)
|
8月前
|
数据采集
静态代理IP对反爬虫策略的应对,以及静态ip对爬虫的助力
静态代理IP在爬虫应用中用于隐藏真实IP,抵御反爬策略。选择可靠代理服务提供商,获取代理IP并配置到爬虫程序。为防止被封锁,可定期切换代理IP、使用多个代理、降低爬取频率及伪装HTTP头信息。这些策略能有效提升爬虫的匿名性和安全性。
|
8月前
|
数据采集 定位技术 Python
Python爬虫IP代理技巧,让你不再为IP封禁烦恼了! 
本文介绍了Python爬虫应对IP封禁的策略,包括使用代理IP隐藏真实IP、选择稳定且数量充足的代理IP服务商、建立代理IP池增加爬虫效率、设置合理抓取频率以及运用验证码识别技术。这些方法能提升爬虫的稳定性和效率,降低被封禁风险。
|
8月前
|
数据采集 安全 API
SOCKS5代理IP:为什么它是网络爬虫的首选?
代理IP在网络爬虫中扮演重要角色,尤其是SOCKS5代理因其灵活性(支持多种协议)、高度匿名性、高速稳定性和安全性而备受青睐。它能帮助爬虫绕过访问限制,隐秘高效地收集数据,同时提供身份验证以保障安全。穿云API作为代理协议,在爬虫领域也受到推崇。
|
8月前
|
数据采集 Web App开发 文字识别
Python爬虫之点触验证码的识别
点触验证码识别思路,初始化,获取,识别。
205 0
Python爬虫之点触验证码的识别