爬虫识别-UA 种类统计-代码实现及效果|学习笔记

简介: 快速学习爬虫识别-UA 种类统计-代码实现及效果。

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

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


爬虫识别-UA 种类统计-代码实现及效果

 

目录:

一、代码实现

二、执行效果

三、总结 

 

一、代码实现

1、抽取出数据中的 IP 和数据中的 ua

统计 IP 截取 IP 和 ua,调用数据 processedData.map 进行遍历循环,map 拿到一条数据 message,message 进行循环。

拿到数据,截取 IP val ip 接收=message.remoteAdder。

获取 ua val ua=message.httpUserAgent

processedData.map(message=>{

//抽取出数据中的 IP 和数据中的 ua

//获取 ip

val ip =message.remoteAddr

//获取 ua

val ua =message.httpUserAgent 

2、使用 ip 作为 key,ua 作为 value,将其输出

(ip,ua)

3、调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value 的 list(ua 的 list)

.groupByKeyAndWindow 传入参数,reduceByKey 时加加,groupby

keyAndWindow 分组不需要加,直接写窗口函数需要的参数,窗口的宽度6秒钟,滑动的步长2秒钟,迭代计算做完。输出(ip,ua)调用 groupbykeyAndWindow 得到 IP 和 ua 的 list,返回结果为 IP 以及 list 里面是 ua

做接收 val ipAndUA, ipAndUA 是拿到的结果。

val ipAndUA=ProcessedData.map(message)=>{

}).groupByKeyAndWindowSeconds(6)seconds(2))//调用 group By

KeyAndWindow,得到的结果是 key(IP)和 value的 list(ua的list)

Key 是 ip 

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

获取 ipAndUA,调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value的 list(ua的list)。获取出ip,和value的list(ua的list),将 value的 list去重再求大小。

拿到 key 和 value的 list,调用.map,处理完的一条条数据 messag

e,获取 ip,val message.

ipAndUA 返回 ip 和 ua,经过 groupByKeyAndWindow 返回 ip 和 value的list 两个值。_1是IP,第一个值。

获取 ua 的 list,val ualist=message.2

ualist 去重,没有.distinct,ualist 数据类型为 Iterable[String]=ualist  不提供 distinct。

转换为 tolist,调用.distinct 可进行去重,去重后调用.size 求大小。拿到 val uaCounts,此批次中一个 ip 有多少 ua

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

ipAndUA.map(message=>{

//获取 ip

val ip=message._1

//获取 ua 的 list

val uaList=message._2

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

val uaCounts= uaList.toList.distinct.size

5、将 ip 和值大小返回

(ip,uaCounts),前面做接受 userAgent 并返回

val userAgent=ipAndUA.map(message=>{

(ip,uaCounts)

})

userAgent

ip 和 ua 返回调用 groupByKeyAndWindow 拿到 key 和 value 的 list(ua的list)。单独拿到 ip、ualist,ualist 转换为 tolist 进行.disti

nct.size。返回接收

//4 按 IP 地址聚合-某个IP,5分钟内的 UA 种类数统计

val userAgentcounts=CoreRule.userAgent(processedData)

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

var=userAgentCountsMap=null

将数据转换为 map,Counts.foreachRDD(rdd=>{ 拿到 rdd,将 rdd 转换为 collectAsMap,数据类型为 [String,Int],复制粘贴到 var=use

rAgentCountsMap=null,用 userAgentCountsMap 接收。使用直接调用。

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

var userAgentCountsMap: collection.Map[string,Int]=nul]

userAgentCounts.foreachrDD(rdd=>{

userAgentCountsMap=rdd.collectAsMap()

})

 

二、执行效果

输出,关闭上个输出

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

userAgentCounts 是 ip 和 userAgent size

输出效果,预处理、爬虫、爬虫识别跑起来。返回1,userAgent 去重,6秒钟,1秒钟刷一次有6条数据。6条数据虽然调用 groupByKey

AndWindow,但做了去重。爬虫只有一个,userAgent 只写一个,一个经过去重求大小只有一个。

19/05/17 19:03:56 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

19/05/17 19:03:56 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

(192.168.100.2,1)

停止爬虫、程序

 

三、总结

1、抽取出数据中的 IP 和数据中的 ua

//获取 ip

val ip =message.remoteAddr

//获取 ua

val ua =message.httpUserAgent

2、使用 ip 作为 key,ua 作为 value,将其输出

(ip,ua)

3、调用 groupbykeyAndWindow,得到的结果是 key(IP)和 value的 list(ua的list)

.groupByKeyAndWindowSeconds(6)seconds(2))

4、单独获取出 ip,和 value 的 list(ua的list),将 value 的 list 去重再求大小就是 ua 的种类

//获取 ip

val ip=message._1

//获取 ua 的 list

val uaList=message._2

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

val uaCounts= uaList.toList.distinct.size

5、将 ip和值大小返回

(ip,uaCounts)

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

var userAgentCountsMap: collection.Map[string,Int]=nul]

userAgentCounts.foreachrDD(rdd=>{

userAgentCountsMap=rdd.collectAsMap()

})

进入 groupbykeyAndWindow,以下是独立操作  

val ipAndUA=ProcessedData.map(message)=>{

//抽取出数据中的 IP 和数据中的 ua

//获取 ip

val ip =message.remoteAddr

//获取 ua

val ua =message.httpUserAgent

//使用 ip 作为 key,ua 作为 value,将其输出

(ip,ua)

}).groupByKeyAndWindowSeconds(6)seconds(2))

拿到 ip 和 ua 的 list,然后单独将 ip ua 抽出,抽出后转换去重求大小。

分两步先求取出 ip 和 ua 的 list,然后对 ua 的 list 去重、求大小。

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