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

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

开发者学堂课程【大数据实战项目:反爬虫系统(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 调用不起来。

相关文章
|
8月前
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
104 1
|
8月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
81 0
|
8月前
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
467 0
|
4月前
|
数据采集 编解码
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
47 0
|
5月前
|
数据采集 存储 JSON
推荐3款自动爬虫神器,再也不用手撸代码了
推荐3款自动爬虫神器,再也不用手撸代码了
224 4
|
5月前
|
数据采集 网络协议 索引
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
|
7月前
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
387 3
|
7月前
|
数据采集
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
73 0
|
8月前
|
数据采集 Web App开发 文字识别
Python爬虫之点触验证码的识别
点触验证码识别思路,初始化,获取,识别。
210 0
Python爬虫之点触验证码的识别
|
8月前
|
数据采集 文字识别 开发者
Python爬虫之图形验证码的识别
python爬虫逆向图形验证码分析,处理和测试实战。
175 0