爬虫识别-关键页面访问量-实现代码及效果|学习笔记

简介: 快速学习爬虫识别-关键页面访问量-实现代码及效果。

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

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


爬虫识别-关键页面访问量-实现代码及效果

 

目录:

一、代码实现

二、执行效果

三、总结

 

一、代码实现

1、抽取出数据中的 IP 和数据中的 url

拿两个数据,IP 作为最终的 key,url 确定是否为关键页面。调用数据 processedData.map 拿到每一条数据 message,截取 ip=message 是 processedData 类型,调用.remoteAddr 服务器的 ip。

获取 url,val url=message.request,request 为访问的 url

def criticalPagesCounts(processedData:[ProcessedData],criticalPa

gesList:ArrarBuffer[String]:DStream[Unit]={

processedData.map(message=>{

//抽取出数据中的 IP 和数据中的 url

//获取 ip

val ip =message.remoteAddr

//获取url

val url=message.request

2、遍历数据库中的关键页面的规则。

规则 criticalPagesList 关键页面的 List,用 for 循环遍历,来源于关键页面 List。遍历每个关键页面使用 url 进行匹配 url.matches 匹配关键页面

//遍历数据库中的关键页面的规则。

for(criticalPages<-criticalPagesList){

//使用 url 与规则进行匹配,

url.matches(crititalPages)

}

3、使用 url 与规则进行匹配

若数据的 url 能够与规则的任意一个匹配成功,那么表示此 url 是关键页面,将ip和1返回

若数据的 url 能够与规则的任意一个没有匹配成功,那么表示此 url不是关键页面,将ip和0返回

做判断 if 如果 url 匹配上关键页面表示匹配成功,数据是关键页面,否则表示匹配不成功,数据不是关键页面。

定义是否是关键页面的标记,实例一个是否是关键页面的 flag,flag 表示是否是关键页面,默认 false 都不是关键页面,如果匹配成功改为 true,不成功什么都不做。for 循环完成,假设有十个关键页面,匹配到任意一个都变为 true,一个都匹配不上是 false。

for 循环外面如果 flag 是 true 匹配成功是关键页面,返回 ip 和1,否则返回 ip 和0

//实例一个是否是关键页面的 flag

var flag=false

//使用 url 与规则进行匹配

if(url.matches(criticalPages)){//匹配成功 表示数据是关键页面 flag=true

}else{//匹配不成功 表示数据不是关键页面

}

}

if(flag){ //若数据的 url 能够与规则的任意一个匹配成功,表示此 url 是关键页面,将 ip和1返回

(ip,1)

}else{ //若数据的 url 能够与规则的任意一个没有匹配成功,表示此url 不是关键页面,将 ip 和0返回

(ip,0)

}

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

复制粘贴

reduceByKeyAndWindow((a:Int,b:Int)=>a+b,Seconds(6),Seconds(

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

reduceByKey 做++操作,如果不是关键页面 ip 和0,0+1=1,窗口宽度6秒钟,执行步长2秒钟。

关键页面访问量计算完毕,前面做接收

//3 按 IP 地址聚合-某个 IP,5分钟内的关键页面访问总量

val criticalPagesCounts=CoreRule.criticalPagesCounts(processedD

Ata,broadcastCriticalPagesList,value)

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

调用 val 关键页面 map =null,遍历转换结果 .foreachRDD rdd.coll

ectAsMap()

数据类型 collection.Map 里面是 String 类型的 IP,Int 类型的值。数据类型定义到 criticalPagesCountsMap,用此数据类型进行接收

报红,将 val 改为 var

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

var criticalPagesCountsMap:collection.Map[String,Int]=null

criticalPagesCounts.foreachDD(rdd=>{

criticalPagescountsMap=rdd.collectAsMap()

})

 

二、执行效果

实现 foreachRDD 执行效果,关键页面访问多少次。

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

上面第二个是一共访问多少次,没有关键页面要求,关闭上面输出

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

//ipcounts.foreachRDD(rdd=>rdd.foreach(println))

程序停止,预处理执行,爬虫跑起来,爬虫识别右键执行此为关键页面的访问量,前面是访问总量。

19/05/17 18:01:08 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

19/05/17 18:01:08 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

(192.168.100.2,6)

数值6与没加关键页面一样,爬虫数据单一,最终过滤是数据的访问量,与真实数据有区别,数据正确。

第三个做完,爬虫停止。 

 

三、总结

1、抽取出数据中的 IP 和数据中的 url

url 目的是否为关键页面,url 匹配关键页面

//获取 ip

val ip =message.remoteAddr

//获取url

val url=message.request

2、遍历数据库中的关键页面的规则。

for(criticalPages<-criticalPagesList){

//使用 url 与规则进行匹配,

url.matches(crititalPages)//匹配成功 表示数据是关键页面 flag=true

}else{//匹配不成功 表示数据不是关键页面

}

}

3、使用 url 与规则进行匹配

若数据的 url 能够与规则的任意一个匹配成功,表示此 url 是关键页面,将 ip 和1返回

若数据的 url 能够与规则的任意一个没有匹配成功,表示此 url 不是关键页面,将 ip 和0返回,通过循环返回,判断,flag 表示是否是关键页面

if(flag){

(ip,1)

}else{

(ip,0)

}

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

reduceByKeyAndWindow((a:Int,b:Int)=>a+b,Seconds(6),Seconds(

2))

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

var criticalPagesCountsMap:collection.Map[String,Int]=null

criticalPagesCounts.foreachDD(rdd=>{

criticalPagescountsMap=rdd.collectAsMap()

})

第三个已实现,遍历规则时不是匹配上后立刻返回(ip,1)(ip,0),先判断拿到的结论是否为关键页面,根据是与不是返回,如果在 flag=true 返回1报错,reduceByKey 调用不起来。

相关文章
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
427 1
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
168 0
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
1205 0
|
2月前
|
数据采集 人工智能 JSON
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
|
5月前
|
数据采集 存储 数据库
Python爬虫开发:Cookie池与定期清除的代码实现
Python爬虫开发:Cookie池与定期清除的代码实现
|
5月前
|
数据采集 监控 网络协议
基于aiohttp的高并发爬虫实战:从原理到代码的完整指南
在数据驱动时代,传统同步爬虫效率低下,而基于Python的aiohttp库可构建高并发异步爬虫。本文通过实战案例解析aiohttp的核心组件与优化策略,包括信号量控制、连接池复用、异常处理等,并探讨代理集成、分布式架构及反爬应对方案,助你打造高性能、稳定可靠的网络爬虫系统。
378 0
|
8月前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
8月前
|
数据采集 存储 NoSQL
如何避免Python爬虫重复抓取相同页面?
如何避免Python爬虫重复抓取相同页面?
|
8月前
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
数据采集 存储 JSON
推荐3款自动爬虫神器,再也不用手撸代码了
推荐3款自动爬虫神器,再也不用手撸代码了
1265 4