开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第五阶段:爬虫识别-关键页面访问量-需求及实现思路】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/673/detail/11699
爬虫识别-关键页面访问量-需求及实现思路
目录:
一、目标
二、需求
三、设计
四、实践
五、详细步骤
一、目标
//3 按 IP 地址聚合-某个 IP,5分钟内的关键页面访问总量
比第二个多一个条件关键页面,计算关键页面。
目标:计算某个 IP,5分钟内的关键页面访问总量
二、需求
什么是关键页面
在主网站中,除了可以查询、预定车票外,有很多查询请求,例如:服务大厅、实名认证。
官方中国南方航空为例
首页是需要的查询操作,除此之外有南航假期、明珠俱乐部、优惠信息、出行帮助等界面。点击进去也有数据,对爬虫数据没有意义不大,首页查询数据是有用的为关键页面,除此之外界面无关紧要。
此类请求的后缀不是过滤 html、css、is 等文件,数据在预处理时被处理,和查询请求一样的 ao 文件,此类请求对于业务没有用,但是不能将它们过滤,需要对关键页面(查询、预定)进行设置,将只对爬电识别有用的关键页面设置到企业的数据库中。后期用数据与之匹配。
通过筛选关键页面的统计量,能很容易的识别出爬虫信息,前面已经读取关键页面的信息、流程数据,5-2已经完成,直接将数据与规则进行匹配。
通过筛选关键页面的统计量,能很容易的识别出爬虫信息,爬虫非常关心关键页面,访问关键页面次数越多,是爬虫可能性越大。因为普通用户不会在短时间内大量的访问关键页面。爬虫速度快会频繁访问关键页面,访问的关键页面次数越多,是爬虫的可能性越大。
企业系统内设置指标的阈值。如果根据数据计算出的结果(关键页面访问量)超过设置的阈值,很有可能是爬虫。
5分钟内的关键页面访问总量<100
正常用户访问关键页面10、20次,超过100很可能是爬虫,爬虫100很容易做到
三、设计
拿到数据与数据库里的关键页面进行匹配,数据中的 url 与关键页面匹配成功就是关键页面,是关键页面的前提下统计是否做过 reduce
ByKey 在第二步基础上加一个条件。
先判断关键页面,遍历数据,如果是关键页面返回(remoteaddr,1),不是关键页面返回(remoteaddr,0)匹配失败,做 reduceByKey 时0+0=0,计算出关键页面的访问次数
1、拿到 kafka 消息和数据库关键页面广播变量的 value
2、从 kafka 数据中拿到 request,匹配关键页面
3、匹配成功记录(remoteaddr,1)
4、匹配失败记录(remoteaddr,0)
5、统计最终结果
四、实践
代码写到独立的 updata,复制粘贴关键页面总数,使用前面数据,关键页面的规则广播变量已经做好,读取的关键页面放到广播变量中,复制粘贴,调用.value
CoreRule.criticalPagesCounts(processedData,broadcastCriticalPagesList.value
创建,问号删除括号补全
def criticalPagesCounts(processedData:[ProcessedData],value:Ar
rarBuffer[String]:Unit={
放到最后
拿到 kafka 消息与数据库关键页面广播变量的 value 匹配,匹配目的确定是否为关键页面,是关键页面返回(remoteaddr,1),不是返回(remoteaddr,0),调用 reduceByKeyAndWindow 计算
五、详细步骤
抽取出数据中的 IP 和数据中的 url,url 判断是否为关键页面。用 url 匹配数据库中的规则,匹配上是关键页面,匹配不上不是关键页面。
1、抽取出数据中的 IP 和数据中的 url
2、遍历数据库中的关键页面的规则。
3、使用 url 与规则进行匹配
若数据的 url 能够与规则的任意一个匹配成功,那么表示此 url 是关键页面,将 ip 和1返回
若数据的 url 能够与规则的任意一个没有匹配成功,那么表示此 url不是关键页面,将 ip 和0返回
4、调用 reduceByKeyAndWindow 计算最终每个 ip 段的总量
5、将最终数据转换为 Map.便于后续提取、使用。
url 和关键页面表达式 value 改为 criticalPagesList