爬虫识别-爬虫数据去重| 学习笔记

简介: 快速学习爬虫识别-爬虫数据去重

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

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


爬虫识别-爬虫数据去重

内容介绍:

一.黑名单数据去重

二.思路与关键代码

三.效果

 

一.黑名单数据去重

1.目标:

经过计算后的黑名单数据含有重复数据,在写入 redis 前,需要对这批数进行去重

2.需求

拿到黑名单数据 antiBlackResults 会发现,之前是每隔5分钟(这里是每6秒钟)进行的指标计算,此时出现的结果就会有重复的 ip 黑名单数据,在保存 Redis 之前,要将重复的数据进行过滤。(比如说,一批数据总共50条,20条非爬虫数据过滤掉之后,剩下30条爬虫数据,而这30条数据里面,很有可能是一个爬虫打过来的数据,因此要对爬虫数据去重。)

image.png

如图所示为数据处理流程,采集脚本数据后,向 Kafka 集群发送数据,每访问一次就发送一条数据,所以,30条爬虫数据来源于一只爬虫是极有可能的。所以在这一批数据里面,只是一个爬虫,但是它有30条数据,这30条数据针对它进行判断是否是爬虫,那么全都是爬虫,实际上,它返回的这30个结果一模一样,所以要进行去重。

3.设计

1.拿到黑名单数据进行 map, 获取出数据的 ip 和打分数据 (flowsScore) (包含了是否是爬虫)

flowsScore就是数据中的flowsScoreArray[FlowScoreResult]的值,

case class FlowScoreResult( flowId: string,

flowScore: Double,

flowLimitedScore: Double,

isUpLimited: Boolean,

flowStrategyCode: String,

hitRules: List[String],

hitRules: List[String],

hitTime: String)

flowsScore 包含了流程 ID ,分数,阈值,最终是不是爬虫,以及后面的 code 码,规则时间。

2.调用 reduceByKey 算子将相同 ip 的数据过滤,只保留最后一个(任意一个,这是因为相同 IP 的数据的结果都是一样的,只保留任何一个就可以,其余的全部去掉。)

 

二.思路与关键代码:

1. 遍历每一个黑名单数据,将数据的 ip 作为 key , flowsScore 作为 value 获取出来

2. 将两个数据返回

3. 调用 reducebykey((k,v)=>v) 取出相同的数据中的最后一个

(最后一个或第一个都是可以的)

//2 对爬虫数据进行去重操作

//2.1遍历每一个黑名单数据,将数据的 ip 作为 key , flowsScore 作为 value 获取出来

val blackDatas= allBlackDatas.map(message=>{

//拿到数据后,获取数据的 IP,因为 allBlackData 也是 Data 这种数据类型

val ip=message.ip

//获取数据的 flowsScore

val flowsScore=message.flowsScore

//2.2 将两个数据返回

(ip,flowsScore)

}).reduceByKey((k,v)=>v) //2.3.调用 reducebykey((k,v)=>v) 取出相同的数据中的最后一个或者最后一个(这里 kv 是两个值,我们返回的是 k, 返回 v 也可以。)

blackDatas.foreachRDD(rdd=>rdd.foreach(println))  //输出

关掉前面的输出之后,现在只有这一个是可以输出的。

先运行数据预处理,再运行爬虫,然后运行爬虫识别。

 

三.效果

先运行数据预处理,再运行爬虫,然后运行爬虫识别。

image.png

如图所示,虽然有两个爬虫数据,但是因为两个爬虫数据一样,进行了去重,所以只输出了一个 flowsScore

相关文章
|
1月前
|
数据采集 API 数据处理
Objective-C 音频爬虫:实时接收数据的 didReceiveData: 方法
Objective-C 音频爬虫:实时接收数据的 didReceiveData: 方法
|
2月前
|
数据采集 存储 监控
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
本文探讨了如何利用 PHP 的 `set_time_limit()` 与爬虫工具的 `setTrafficLimit()` 方法,结合多线程和代理 IP 技术,高效稳定地抓取百度云盘的公开资源。通过设置脚本执行时间和流量限制,使用多线程提高抓取效率,并通过代理 IP 防止 IP 封禁,确保长时间稳定运行。文章还提供了示例代码,展示了如何具体实现这一过程,并加入了数据分类统计功能以监控抓取效果。
69 16
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
|
1月前
|
消息中间件 数据采集 数据库
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
27 1
|
1月前
|
数据采集 数据挖掘 数据处理
Python中实现简单爬虫并处理数据
【9月更文挑战第31天】本文将引导读者理解如何通过Python创建一个简单的网络爬虫,并展示如何处理爬取的数据。我们将讨论爬虫的基本原理、使用requests和BeautifulSoup库进行网页抓取的方法,以及如何使用pandas对数据进行清洗和分析。文章旨在为初学者提供一个易于理解的实践指南,帮助他们快速掌握网络数据抓取的基本技能。
59 3
|
2月前
|
数据采集 Python
天天基金数据的Python爬虫
天天基金数据的Python爬虫
59 3
|
2月前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
2月前
|
数据采集 JSON 数据格式
Python:南京地铁每日客流数据的爬虫实现
Python:南京地铁每日客流数据的爬虫实现
68 1
|
1月前
|
数据采集 Web App开发 JSON
爬虫实战小案例—获取喜马拉雅账号的关注数据和粉丝数据生成电子表格并实现批量关注或者取关然后生成表格文件
爬虫实战小案例—获取喜马拉雅账号的关注数据和粉丝数据生成电子表格并实现批量关注或者取关然后生成表格文件
|
1月前
|
数据采集
爬虫案例—抓取找歌词网站的按歌词找歌名数据
爬虫案例—抓取找歌词网站的按歌词找歌名数据
|
2月前
|
数据采集 Python
爬虫练手:某网图书畅销榜排名数据
爬虫练手:某网图书畅销榜排名数据
30 0