开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第五阶段:爬虫识别-关键页面的 cook 统计-需求及思路】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/673/detail/11705
爬虫识别-关键页面的 cook 统计-需求及思路
目录:
一、目标
二、需求
三、设计
四、详细思路
一、目标
//6 按 IP 地址聚合-某个 IP,5分钟内访问关键页面的 cookie 数
前提是关键页面,必须是关键页面的 cookie 数,cookie 要去重。如果 cookie 出现10次,作为1次,看 cookie 的种类。是关键页面统计 cookie 做去重。
目标:计算出某个 IP,5分钟内关键页面的访问次数的 Cookie 数
二、需求
Cookie 可以衡量是否是爬中的指标,cookie 中 JSESSIONID 可以用来区别每一个 cookie,只要计算出5分钟内所有访问过关键页面的 cookie,将每个 cookie 的 JSESSIONID 取出来进行去重汇总计算,前提必须是关键页面,只有爬虫更关心关键页面。
如果爬虫访问关键页面,为了防止反爬虫技术来回切换 cookie,切换的越多暴露可能性越大。统计 JSESSIONID 出现的次数越多,代表来回切换的次数越多,是爬虫的可能性就越大。普通用户不会频繁的切换 cookie,次数越多是爬虫可能性越大。
企业系统内设置了此指标的阈值。根据5分钟内关键页面的访问次数的 Cookie 数做阈值,如果访问的 cookie 大于阈值,很可能是爬虫。
根据数据计算出的结果(关键页面访问量)超过设置的阈值,那么他很有可能是爬虫。
5分钟内关键页面的访问次数的 Cookie 数<4
三、设计
1、拿到 kafka 数据,关键页面的广播变量,窗口时间,滑动时间进行计算
关键页面信息添加到广播变量,前提是关键页面,必须拿到关键页面,广播变量里拿到所有节点。
2、从 kafka 数据中取到 request,匹配关键页面
读取 url,前提是关键页面,拿到 url 的正则表达式,只有拿到 url 与关键页面的正则表达式匹配,匹配上证明是关键页面。
3、匹配成功,记录(remoteaddr,JSESSIONID),并做
4、groupByKeyAnd
Window操作,将相同 remoteaddr 的JSESSIONID统计到
ArrayBuffer中
匹配成功表示是关键页面,获取(remoteaddr,JSESSIONID)进行输出,如果匹配失败返回空。调用 groupByKeyAndWindow 进行汇总,得到 ip 和对应的 JSESSIONID list,将 JSESSIONID list 放到 ArrayBuffer 里汇总。
5、拿到上面的数据进行去重 count,最终封装数据(remoteaddr,JSESSIONIDCount)并返回
获取 JSESSIONID list 转换为 list 去重、求大小,ip 和 Count 返回。
方法名字复制粘贴 CoreRule.criticalCookies 放到开发工具,括号补全,拿数据 processedData,关键页面信息
broadcastCriticalPagesList.value
CoreRule.criticalCookies(processedData,broadcastCriticalPagesList.value
创建方法,问号删除括号补全
defcriticalCookies(processedData:DStream[ProcessedData],value
:ArrarBuffer[String]:Unit={
放到最后
四、详细思路
拿到 url,关键页面是 url 的正则,先拿到 url 匹配。拿到 cookie,要统计 cookie 数量,对 cookie 进行去重求大小。
1、抽取出数据中的 IP,数据中的 url 和数据中的 Cookie
2、遍历数据库中的关键页面的规则。
3使用url与规则进行匹配
若数据的url能够与规则的任意一个匹配成功,表示此 url 是关键页面,将 ip 和 Cookie 返回
若数据的 url 与规则的任意一个没有匹配成功,表示此 url 不是关键页面,将””和””返回
4、调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value的 list(Cookie的list)
5、获取出 ip,和 value 的 list(Cookie的list),将 value 的 list 去重再求大小。
6、将 ip 和值大小返回
7、将终数据转换为 Map,便于后续提取、使用。
拿到开发工具
//1抽取出数据中的 IP,数据中的 url 和数据中的 Cookie
//2遍历数据库中的关键页面的规则。
//3使用url与规则进行匹配
//若数据的url能够与规则的任意一个匹配成功,表示此 url 是关键页面,将 ip 和 Cookie 返回
//若数据的 url 与规则的任意一个没有匹配成功,表示此 url 不是关键页面,将””和””返回
//4调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value的 list(Cookie的list)
//5获取出 ip,和 value 的 list(Cookie的list),将 value 的 list 去重再求大小。
//6将 ip 和值大小返回
//将终数据转换为 Map,便于后续提取、使用。