爬虫识别-关键页面的 cook 统计-代码实现及效果|学习笔记

简介: 快速学习爬虫识别-关键页面的 cook 统计-代码实现及效果

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

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


爬虫识别-关键页面的 cook 统计-代码实现及效果

 

目录:

一、代码实现

二、回顾

三、执行效果

四、总结

 

一、代码实现

写代码,前面写过的代码几乎覆盖,直接粘贴写过的代码。

//1抽取出数据中的 IP,数据中的 url 和数据中的 Cookie

拿到 ip 和 cookie 后做关键页面,找关键页面判断,复制粘贴

添加

数据中的 cook,获取 cook,val cook=message.cookie 里的 JSE

SSIONID

processedData.map(message=>{

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

//获取 ip

val ip =message.remoteAddr

//获取 url

val url=message.request

//获取 cook

val cook=message.cookie_JSESSIONID

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

var flag=false

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

criticalPagesList 报错,value 改为 criticalPagesList

def criticalPagesCounts(processedData:DStream[ProcessedData],

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

拿到某个关键页面 url 匹配,flag 表示是否是关键页面,匹配上是 true,匹配不成默认是 false

for(criticalPages<-criticalPagesList){

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

匹配成功返回(ip,cook),匹配不成功返回(“”,””)

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

flag=true

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

}

}

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

(ip,cook)

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

(“”,””)

}

//4调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value的 list(Cookie的list)

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

做接收返回 ipAndCook

val ipAndCook=processedData.map(message=>{

//遍历 ipAndCook

ipAndCook.map 拿一条数据,做返回

ipAndCook.map(message=>{

//5获取出 ip,和 value 的 list(Cookie的list),将 value 的 list 去重再求大小。

复制粘贴修改,获取不同行程的 list 改为获取 Cookie的list,删除获取出 ip,和 value 的 list。deparrcity 改为 cookList,去重求大小转换 toList.distinct.size 获得 cookSize,将 cookSize 返回。

//获取 ip

val ip=message._1

//获取 Cookie的list

val cookList=message._2

//将 value 的 list去重再求大小。

val cookSize=cookList.toList.distinct.size

//6将 ip 和值大小返回

(ip,cookSize)

 

二、回顾

截取数据 ip url cookie,ip 是 key,url 判断是否是关键页面。

遍历关键页面每个规则,用 url 匹配,匹配成功将 flag 改为 true 表示是关键页面返回(ip,cook),不是返回空。

groupByKevAndWindow,得到 IP 和 cook 的 list

遍历 ipAndCook,获取 IP 和 cook 的 list,去重求大小。

做接收,返回

val ipCookCount=ipAndCook.map(message=>{

ipCookCount

}

判断关键页面,求 cookSize,返回

//6 按 IP 地址聚合-某个 IP,5分钟内访问关键页面的 Cookie 数

做接收

val ipCookCount=CoreRule.criticalCookies(processedData,broadca

stCriticalPagesList.value)

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

var=ipCookCountMap=null

拷贝数据类型

var=ipCookCountMapcollectAsMap[String,Int]=null

遍历数据.foreachRDD,将 rdd 转换为 collectAsMap,用 collectAs

Map 接收

ipCookCount.foreachRDD(rdd=>{

ipCookCountMap=rdd.collectAsMap()

})

 

三、执行效果

输出,循环遍历,调用 ipCookCount

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

输出效果,预处理、爬虫、爬虫识别跑起来,右键执行

关键页面前面输出 ip,数量为1。cook 去重求大小,前提是关键页面,爬虫访问的都是关键页面,与前面效果相同(192.168.100.2,1)

19/05/17 20:15:08 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

19/05/17 20:15:08 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

(192.168.100.2,1)

停止程序、爬虫

 

四、总结

先判断是否为关键页面,是关键页面的前提下返回 ip 和 cook 的 size,cookSize 求大小

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

//获取ip

val ip =message.remoteAddr

//获取url

val url=message.request

//获取 cook

val cook=message.cookie_JSESSIONID

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

for(criticalPages<-criticalPagesList){

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

匹配成功返回(ip,cook),匹配不成功返回(“”,””)

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

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

}

}

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

if(flag){

(ip,cook)

}else{  

(“”,””)

}

4、调用 groupByKevAndWindow,得到的结果是 key(IP)和 value 的 list(Cookie的list)

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

5、获取出 ip,和 value 的 list(Cookie 的 list),将 value 的 list 去重再求大小。

//获取 Cookie 的 list

val cookList=message._2

//将 value 的 list去重再求大小。

val cookSize=cookList.toList.distinct.size

6、将 ip 和值大小返回

(ip,cookSize)

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

var=ipCookCountMapcollectAsMap[String,Int]=null

ipCookCount.foreachRDD(rdd=>{

ipCookCountMap=rdd.collectAsMap()

})

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