爬虫识别-小于自设值的次数-代码实现及效果|学习笔记

简介: 快速学习爬虫识别-小于自设值的次数-代码实现及效果。

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

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


爬虫识别-小于自设值的次数-代码实现及效果

 

1设置一个计数器(记录小于自设值数据出现的,次数)

Var_lessDefaultTime=0(计数器会变化,小于值,默认时间、数量) 

2抽取出数据中 iP 和数据的访问时间、url(判断是否是关闭页面)

从第二步骤开始,基本上与第七个模块实行的相近.从第二部到第十部。与第七模块非常相近,所以将第七模块代码直接复制使用稍作修改

val ipAndTime=processedData map(message=>{

/获取 ip

val ip =message.remoteAddr

/获取 url

val url=message.request

/获取 time time=message.timeIso8601

判断是否为关键页面,查询关键页面的次数。写下一个关键页面的 flag

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

var flag=false(默认不是关键页面) 

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

for(criticalPages<-criticalPagesList){ 

4使 urL 与规则进行匹配

若数据 urL 能够与规则的任意一个匹配成功,那么表示这个 urL 就是关键页面,ip 和时间返回

若数据 urL 能够与规则的任意一个没有匹配成功,那么表示这个 urL 不是关键页面,将”"返回

if(url.matches(criticalPages)){//若数据 urL 能 够与规则的任意一个匹成功,那么表示这个 url 是关键页面

flag=true

}else{/若数据 urL 能够与规则的任意一个没有匹配成功,那么表示这个 urL 不是关键页面}

if (flag){

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

(ip,time)

}else{

//不是关键页面,将””返回

(“,")

}

}).groupByKeyAndwindow(seconds(6),Seconds(2)) 

5调用 groupByKeyAndwindow,或得到的结果是 key(IP)和 value 的 list(时间 list)

//遍历 ripAndTime

val minTimeDiff=ipAndTime.map(message=>{

6获取到 ip 和时间的 list

/获取 ip

val ip=message.1

/获取时间的 list

val timelist=message.2

/(两个以上的数据才能计算时间差

if(timeList.size>1){

/实例一个接收时间戳类型数据list

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

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

//计算时间差需要用到

val simple =new simpleDateFormat(pattern ="yyyy-MM-dd HH:mm:ss")

for(time<-timeList){

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

//2019-05-1409:08:50

先得到时间 list 进行遍历。继续转接时间从零变成+,t 变成空格(转换成标准时间)

Val timestring=time.substring

(0,time.indexof("+")).replace(target ="T",replaceme

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

val longTime=simple.parse(timeString).getTime 

8将多个时间戳添加到一个 List

longTimeList.add(longTime)//一个时间戳,时间的list在前面已布置完成

}

//不需要时间差集合,时间差已被计算完成

9对这个时间戳list进行排序

val longTimeListArray=longTimeList.toArray()

util.Arrays.sort(longTimeListArray)

10遍历每两个时间戳,求取两个时间戳的时间差

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

val timeDiff=longTimeListArray(i).tostring.toLong-longTimeListArray(i-1).tostring}

不需要时间差 list 将其删除,也可以保留再遍历list,排序不需要将其删除,最小时间差返回不需要删除 

11用时间若与自设值进行对比

//若时间差小于自设值,那么计数器加1

if(timeDiffkdefaultTime){

lessDefaultTime+=1

}

//若时间差大于自设值,跳过(什么都不做)

时间差已经存在,自设置是前面设置完成 defaulttime,继续做判断。若时间差小于自设值计数器加=1。

若时间差大于自设置,跳过可以不写,也可以写入 else 内容为空。但是还需要进行一个操作,可以看到计算出来的时间是一个时间戳。最小访问时间间隔是1000毫秒。在数据库内设置的是2或者是1,2永远小于1000,2表示2秒。表示出来的 rulevalue 表示2,需要将其转化成时间戳,所以把 rulevalue*1000,转化成1000毫秒。

后面技术出来的时间差也是毫秒以此之间可以进行对比

12将 ip 和计数器的值返回

LessdefaultTimes

}}

IP 在前方已经获取到,小于默认值数量

小于最小时间集合的大于 LessdefaultTimes,像 进行返回,括号一定要注意之间存在的关系。切记不要填错位置好。返回后,第八个指标已被计算完成。计算完成后,在前方进行接收复制,回到代码预处理程序

Else{

(“ ”,0)}

}) 

13指标输出

做一个接收,val 一个小于默认的 times,是计算的数据,然后将其转化成转化成 map,var 格式=null,前面加 map,数据类型直接使用是 collection,遍历数据转化成 map,rdd.collectAsMap 转化成 map 类型接收,此时转化完成,做接收讲rdd 注释。此时代码写完成,查看效果。

//将最终数据换为 map,便于后续提取使用

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

Database

minTimeDiff.foreachRDD(rdd=>{

minTimeDiffMap=rdd.collectAsMap()

})

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

Bean Validation

按照 IP 地址聚合-某个 iP,5分钟内小于最短访时间间隔(自设)的关键页面查询次数

val lessDefaultTimes=CoreRule.LessDefaultTimes(processedData,broadcastcriticalPagesList.value,broadcastFlowList.value)

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

var lessDefaultTimesMap:collection.Map[string,Int]=null

lessDefaultTimes.foreachRDD(rdd=>{

Ant

lessDefaultTimesMap=rdd.collectAsMap()

})

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

运行数据预处理程序查看效果。同时将爬虫右键执行,此时爬虫已经开始,预处理有刷新。

image.png

执行爬虫识别第八个指标,执行时,前七个指标也在进行。只不过没有做输出。可以查看到 IP 和数量

image.png

此时数据库内设置的最小访问实验间隔为2秒。此时,最短爬虫时间间隔为一秒钟跑一次,窗口是6秒钟,6次存在5个时间间隔,5个时间间隔接是1秒钟,是小于2秒钟的时间间隔,IP 是5次。此时第八个指标的代码和效果已经查看完毕。

相关文章
|
7月前
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
92 1
|
7月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
77 0
|
7月前
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
445 0
|
3月前
|
数据采集 编解码
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
37 0
|
4月前
|
数据采集 存储 JSON
推荐3款自动爬虫神器,再也不用手撸代码了
推荐3款自动爬虫神器,再也不用手撸代码了
|
6月前
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
346 3
|
6月前
|
数据采集
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
技术心得:我在写爬虫的验证码识别方案之有个平台叫无限代码
67 0
|
7月前
|
数据采集 Web App开发 文字识别
Python爬虫之点触验证码的识别
点触验证码识别思路,初始化,获取,识别。
201 0
Python爬虫之点触验证码的识别
|
7月前
|
数据采集 文字识别 开发者
Python爬虫之图形验证码的识别
python爬虫逆向图形验证码分析,处理和测试实战。
162 0
|
7月前
|
数据采集 存储 JSON
解析Perl爬虫代码:使用WWW::Mechanize::PhantomJS库爬取stackoverflow.com的详细步骤
在这篇文章中,我们将探讨如何使用Perl语言和WWW::Mechanize::PhantomJS库来爬取网站数据。我们的目标是爬取stackoverflow.com的内容,同时使用爬虫代理来和多线程技术以提高爬取效率,并将数据存储到本地。