爬虫识别-不同行程统计-代码实现及效果|学习笔记

简介: 快速学习爬虫识别-不同行程统计-代码实现及效果。

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

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


爬虫识别-不同行程统计-代码实现及效果

 

目录:

一、代码实现

二、执行效果

三、总结

 

一、代码实现

1、抽取出数据中的 IP 和数据中的出发地和目的地

获取数据中的 IP、出发地和目的地调用数据 processedData.map 方法,map 拿到一条数据 message。

拿到数据,获取 IP val ip=message.remoteAdder。

获取出发地 dep=message. 没有 depcity,不能直接调用,找到核心参数,封装时将出发地目的地时间封装到 requestParams。调用 req

uestParams.depcity。

获取目的地 val arrcity=message.requestParams.arrcity

processedData.map(message=>{

//获取 ip

val ip =message.remoteAddr

//抽取出数据中的 IP 和数据中的出发地和目的地

//获取出发地

val depcity=message.requestParamsdepcity

//获取目的地

val arrcity=message.requestParams.arrcity

2、使用 ip 作为 key,将出发地拼接目的地,以拼接的结果作为 value 将其输出

//拼接出发地和目的地

不同的城市 deparrCity=depCity+arrcity

val deparrCity=depCity+arrcity

//使用 ip 作为 key,将出发地拼接目的地,以拼接的结果作为 value 将其输出

(ip,deparrCity)

3. 调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value 的 list(出发地拼接目的地的 list

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

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

Key 是 ip

4、获取出 ip,和 value 的 list(出发地拼接目的地的 list),将 value 的 list 去重再求大小

定义变量接收

val ipAndDepArr=message.requestParams.arrcity

IpAndDepArr 是 ip 不同城市出发地和目的地结合

结合.map 拿到数据 message 进行遍历。message._1,1是 IP,第一个值。

获取 ip,IpAndDepArr 返回结果是 ip 和不同城市,groupByKeyAnd

Window 拿到不同城市的 list

获取不同行程的 list

val deparrCity=message 的第二个数据

将 value 的 list 去重再求大小

deparrCity 转换为 list,去重.distinct,求大小.size,val 不同城市的大小

ipAndDepArr.map(message=>{

//获取 ip

val ip=message._1

//获取不同行程的 List

//获取出 ip,和 value 的 list(出发地拼接目的地的 list)

val deparrcity=message._2

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

val deparrsize=deparrcity.toList.distinct.size

5、将 ip 和值大小返回

(ip,deparrsize)

做接收返回

val differentJourneySize=ipAndDepArr.map(message=>{

differentJourneySize

}

前面做接收

//5 按 IP 地址聚合-某个IP,5分钟内查询不同行程的次数

val differentJourneycounts=CoreRule.differentJourney(processedD

ata)

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

定义

var=differentJourneyCountsMap=null

遍历 map,将数据转换为

map,differentJourneyCounts.foreachRDD

(rdd=>{ 拿到 rdd,将 rdd 转换为 collectAsMap,数据类型为 [Strin

g,Int],复制粘贴到 var=differentJourneyCountsMap=null,用 differ

entJourneyCountsMap 接收。

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

var differentJourneysCountsMap:collectionMapstring,

Int]=null

differentJourneysCounts.foreachRDD(rdd=>{

differentJourneysCountsMap=rdd.collectAsMap()

})

 

二、执行效果

输出,关闭上个输出

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

输出

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

输出效果,预处理、爬虫、爬虫识别跑起来。理想状态下是 ip 和1

19/05/17 19:31:30 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

19/05/17 19:31:30 INFO VerifiableProperties: Property zookeeper.

connect is overridden to

(192.168.100.2,1)

爬虫出发目的地是固定的只有一种情况,做去重和求大小,求完后只有1个。与 userAgent 结果相同,如果有真实数据是不同的。

停止程序、爬虫


三、总结

1、抽取出数据中的 IP 和数据中的出发地和目的地

val ip =message.remoteAddr

//抽取出数据中的IP 和数据中的出发地和目的地

//获取出发地

val depcity=message.requestParamsdepcity

//获取目的地

val arrcity=message.requestParams.arrcity

2、使用 ip 作为 key,将出发地拼接目的地,以拼接的结果作为 value 将其输出

(ip,deparrCity)

3、调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value 的 list(出发地拼接目的地的list

.groupByKeyAndWindowSeconds(6)seconds(2))

4、获取出 ip,和 value 的 list(出发地拼接目的地的 list),将 value 的 list 去重再求大小

val deparrcity=message._2

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

val deparrsize=deparrcitytoListdistinct.size

5、将 ip 和值大小返回

(ip,deparrsize)

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

vardifferentJourneysCountsMap:collectionMapstring,Int]=null

differentJourneysCounts.foreachRDD(rdd=>{

differentJourneysCountsMap=rdd.collectAsMap()

})

相关文章
|
数据采集 开发者
如何编写有效的爬虫代码来避免网站的反爬虫机制?
如何编写有效的爬虫代码来避免网站的反爬虫机制?
427 1
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
168 0
|
数据采集 机器学习/深度学习 安全
Python爬虫之极验滑动验证码的识别
了解极验滑动验证码、特点、识别思路、初始化、模拟点击、识别缺口、模拟拖动。
1205 0
|
2月前
|
数据采集 人工智能 JSON
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
|
5月前
|
数据采集 存储 数据库
Python爬虫开发:Cookie池与定期清除的代码实现
Python爬虫开发:Cookie池与定期清除的代码实现
|
5月前
|
数据采集 监控 网络协议
基于aiohttp的高并发爬虫实战:从原理到代码的完整指南
在数据驱动时代,传统同步爬虫效率低下,而基于Python的aiohttp库可构建高并发异步爬虫。本文通过实战案例解析aiohttp的核心组件与优化策略,包括信号量控制、连接池复用、异常处理等,并探讨代理集成、分布式架构及反爬应对方案,助你打造高性能、稳定可靠的网络爬虫系统。
378 0
|
数据采集 存储 JSON
推荐3款自动爬虫神器,再也不用手撸代码了
推荐3款自动爬虫神器,再也不用手撸代码了
1265 4
|
数据采集 人机交互 API
「Python」爬虫-7.验证码的识别
> 本文主要介绍如何处理一些网页中简单的验证码问题。~~(只提供简单的思路,随着技术的发展,一些验证码已经防范的非常好了,一般的解决方法可能过不了验证码这一关🤺~~
604 0
|
数据采集 编解码
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
jupyter-notebook编写爬虫代码的时候cookie值自动转码的问题
174 0
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
1289 3