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

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

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

相关文章
|
1月前
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
19 1
|
1月前
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
59 0
|
3月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
|
1月前
|
数据采集 Web App开发 文字识别
Python爬虫之点触验证码的识别
点触验证码识别思路,初始化,获取,识别。
55 0
Python爬虫之点触验证码的识别
|
1月前
|
数据采集 文字识别 开发者
Python爬虫之图形验证码的识别
python爬虫逆向图形验证码分析,处理和测试实战。
46 0
|
1月前
|
数据采集 存储 JSON
解析Perl爬虫代码:使用WWW::Mechanize::PhantomJS库爬取stackoverflow.com的详细步骤
在这篇文章中,我们将探讨如何使用Perl语言和WWW::Mechanize::PhantomJS库来爬取网站数据。我们的目标是爬取stackoverflow.com的内容,同时使用爬虫代理来和多线程技术以提高爬取效率,并将数据存储到本地。
|
1月前
|
数据采集 前端开发 JavaScript
Java网络爬虫实践:解析微信公众号页面的技巧
Java网络爬虫实践:解析微信公众号页面的技巧
|
9月前
|
数据采集 JavaScript Python
python爬虫示例,获取主页面链接,次级页面链接通过主页面元素获取从而避免js生成变动的值,保存数据分批次避免数据丢失
python爬虫示例,获取主页面链接,次级页面链接通过主页面元素获取从而避免js生成变动的值,保存数据分批次避免数据丢失
80 0
|
数据采集 人机交互 API
「Python」爬虫-7.验证码的识别
> 本文主要介绍如何处理一些网页中简单的验证码问题。~~(只提供简单的思路,随着技术的发展,一些验证码已经防范的非常好了,一般的解决方法可能过不了验证码这一关🤺~~
352 0
|
10月前
|
数据采集 存储 JSON
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
猜谜游戏在编程语言实践都已经和 HelloWord 程序成为必不可少的新手实践环节,毕竟,它能够让我们基本熟悉 for 循环、变量定义、打印、if else 语句等等的使用,当我们基本熟悉该语言基础之后,就要学会其优势方面的程序实践,比如 Golang 所具备的爬虫及其并发优势。我们将采用彩云词典的英文单词翻译成中文的在线词典爬虫程序,及其改进版本,在并发上,我们将采用 SOCKS5 代理服务器的方式体验 Golang 语言的高并发易用性
61 0
猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释