爬虫识别-关键页面最小访问间隔-效果及总结|学习笔记

简介: 快速学习爬虫识别-关键页面最小访问间隔-效果及总结

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

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


爬虫识别-关键页面最小访问间隔-效果及总结

 

内容介绍:

一、求最小关键页面的访问数

二、求最小访问间隔步骤总结

 

一、求最小关键页面的访问数

ipCookCount 是前面拷过来的,因此我们把它删去,改为 val minTimeDiff ,这样就求出了最小时间。在最后的框复制,即为最小时间间隔。返回后进行接收,val minTimeDiff=CoureRule ,并转化为 Map 。

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

minTimeDiff.foreachRDD(rdd=>{

minTimeDiffMap=rdd.collectAsMap()

}) 

然后我们验证其效果,关机前六个代码,验证第七个。首先执行数据域处理的代码,显示 DateProcessLauncher 并运用爬虫,数据域接收到数据后,运行第七个模块代码(如下)

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

image.png

这里显示的是 ip 和范围,“1000”为1000毫秒。此时爬虫为一秒钟跑一次,两秒跑两次,而窗口为六秒,这样应有五个或六个时间,可以计算出四个或五个时间差,这些时间差应全在范围内,所以显示均为1000毫秒。

 

二、求最小访问间隔步骤总结

1、第一步

拿到数据后,抽取出数据中的 ip 和数据的访问时间及 url , ip 即是为了断定数据 ip , url 用于判断是否是关键页面,访问时间用于计算时间的差,要计算时间间隔就需要先抽取时间。

val ip =message.remoteAddr

//获取 url

val url=message.request

//获取 time

val time=message.timeIso8601

2、第二步

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

3、第三步

使用 url 进行匹配。若数据的 url 能够与规则的任意一个匹配成功,那么表示这个 url 就是关键页面;若数据的 url 能够与规则的任意一个没有匹配成功,那么表示这个 url 不是关键页面。通过 flag 来显示是否为关键页面,若没有匹配成功为 false ,匹配成功为 true 。for(criticalPages<-criticalPagesList){

if(url.matches(criticalPages)){

flag=true

}else{

}

}

若是关键页面,将 ip 和时间返回;

if(flag){

(ip,time)

若不是关键页面,将“”和“”返回。

}else{

(“”,””)

} 

4、第四步

调用 groupByKeyAndWindow ,获得到的结果是 key(IP) 和 value 的 list (时间的地址)。

.groupByKeyAndWindow(Seconds(6),Seconds(2))

5、第五步

获取到 ip 和其对应的时间的 list ,有以上两个数据才能计算时间差。如果拿到的数据只有一个日期,就无法计算时间间隔,就只能返回“”“”和0。当 size >1,即日期至少有两个才能计算时间差。从0截取至+,将 T 进行替换。通过 simple=new SimpleDateFormat 进行转换得到 get.Time 。实例(接受时间数据戳类型数据的 list ):

val longTimeList=new util.ArrayList[Long]()

//获取 ip

val ip=message._1

//获取时间的 list

val timeList=message._2 

6、第六步

遍历时间的 list ,将这个字符串类型国际时间转换成普通时间(时间戳)。 

7、第七步

将多个时间戳添加到一个 list 。

val simple = new SimpleDateFormat (“ yyyy - MM - dd HH : mm : ss” )

for ( time <- timeList ){

//2019-05-14T09:08:50+08:00

//2019-05-14 09:08:50

val timeString = time . substring ( 0 , time . indexOf ("+”)). replace (" T",””)

//将 String 类型的时间转换成时间戳

val longTime=simple.parse (timeString).getTime

//将多个时间戳添加到一个 list

longTimeList.add(longTime)

} 

8、第八步

对时间戳的 list 进行排序。在这个 list 里时间戳十个或二十个为列,将他们进行排序,因为若不是相邻的两个数据那么计算没有意义,需要计算的一定是相邻两个数据的时间差。

val longTimeListArray=longTimeList.toArray()

util.Arrays.sort(longTimeListArray)

9、第九步

遍历两个时间戳,求取两个时间戳的时间差。拿到角标为1的时间戳和第0个时间戳,用第二个减去第一个拿到一个时间差。以此循环。

10、第十步

将该时间差添加到一个时间差的 list 。

for ( i <-1 until (longTimeListArray . length )){

val timeDiff= longTimeListArray(i).toString.toLong -longTimeListArray(i-1). toString . toLong

timeDiffList.add(timeDiff)

} 

11、第十一步

将时间差的 list 进行排序。

val timeDiffListArray= timeDiffList.toArray()

util.Arrays.sort(timeDiffListArray)

12、第十二步

获取排序后的第一个值就是最小时间差。 

13、第十三步

将 IP 和最小时间差返回。

(ip,timeDiffListArray(0).toString.toInt) 

14、第十四步

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

var minTimeDiffMap:collection.Map[String,Int]=null  minTimeDiff.foreachRDD(rdd=>{

minTimeDiffMap= rdd.collectAsMap()

})

相关文章
|
8月前
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
455 0
|
5月前
|
数据采集 网络协议 索引
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
|
8月前
|
数据采集 存储 Web App开发
网页爬虫开发:使用Scala和PhantomJS访问知乎
网页爬虫开发:使用Scala和PhantomJS访问知乎
|
8月前
|
数据采集 Web App开发 文字识别
Python爬虫之点触验证码的识别
点触验证码识别思路,初始化,获取,识别。
204 0
Python爬虫之点触验证码的识别
|
8月前
|
数据采集 文字识别 开发者
Python爬虫之图形验证码的识别
python爬虫逆向图形验证码分析,处理和测试实战。
164 0
|
8月前
|
数据采集 前端开发 JavaScript
Java网络爬虫实践:解析微信公众号页面的技巧
Java网络爬虫实践:解析微信公众号页面的技巧
|
数据采集 人机交互 API
「Python」爬虫-7.验证码的识别
> 本文主要介绍如何处理一些网页中简单的验证码问题。~~(只提供简单的思路,随着技术的发展,一些验证码已经防范的非常好了,一般的解决方法可能过不了验证码这一关🤺~~
418 0
|
数据采集 JavaScript Python
python爬虫示例,获取主页面链接,次级页面链接通过主页面元素获取从而避免js生成变动的值,保存数据分批次避免数据丢失
python爬虫示例,获取主页面链接,次级页面链接通过主页面元素获取从而避免js生成变动的值,保存数据分批次避免数据丢失
117 0
|
数据采集 SQL 消息中间件
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
快速学习数据预处理-历史爬虫判断-实现代码及效果
152 0
数据预处理-历史爬虫判断-实现代码及效果|学习笔记
|
数据采集 监控 前端开发
数据预处理-历史爬虫判断-需求与实现思路|学习笔记
快速学习数据预处理-历史爬虫判断-需求与实现思路
140 0
数据预处理-历史爬虫判断-需求与实现思路|学习笔记