开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第五阶段:爬虫识别-关键页面最小访问间隔-上】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/673/detail/11708
爬虫识别-关键页面最小访问间隔-上
目录:
//1抽取出数据中的 IP 和数据的访问时间及 url
//2遍历数据库中的关键页面的规则
//3使用 url 与规则进行匹配
//4调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value的 list(时间的list)
//5获取到ip和时间的list
1-5步已经做过,复制粘贴前面代码,修改
删除 val ipAndCook,抽取出数据中的 IP 和数据的访问时间及 url
获取时间 val time=.timeIso8601。value 改为 criticalPagesList
def criticalPagesMinTime(processedData:DStream[ProcessedData
],criticalPagesList:ArrarBuffer[String]:DStream[String,Itera
processedData.map(message=>{
//1抽取出数据中的 IP 和数据的访问时间及 url
//获取 ip
val ip =message.remoteAddr
//获取url
val url=message.request
//获取 cook
val time=message.timeIso8601
//实例一个是否是关键页面的 flag
var flag=false
//2 遍历数据库中的关键页面的规则。
for(criticalPages<-criticalPagesList){
//3 使用 url 与规则进行匹配,
拿到 List 循环遍历匹配,匹配成功标记 false 变为 true,匹配失败 else 不是关键页面。是关键页面返回 ip 和 time,不是关键页面。
if(url.matches(criticalPages)){
//若数据的 url 能与规则的任意一个匹配成功,表示此 url 是关键页面
flag=true
}else{
//若数据的 url 与规则的任意一个没有匹配成功,表示此 url 不是关键页面
}
}
if(flag){
//是关键页面,将 ip 和时间返回
(ip,time)
}else{
//不是关键页面,将“”和””返回
(“”,””)
}
//4调用 groupByKeyAndWindow,得到的结果是 key(IP)和 value的 list(时间的list)
groupByKeyAndWindow(Seconds(6),Seconds(2))
val ipAndCook=processedData.map(message=>{
拿到 ip 和时间做接收
val ipAndTime=processedData.map(message=>{
//遍历 ipAndCook
val ipCookCount=ipAndTime.map(message=>{
//5获取到 ip 和时间的 list
获取时间的 List,cookList 改为 timeList
//获取 ip
val ip=message._1
//获取时间的 List
val timeList=message._2
遍历时间的 List,将此字符串类型国际时间转换成普通时间(时间戳)
拿到时间戳后要求时间差,至少有两个时间类型才能求时间差。
假设一批数据过来,只有一个,没办法求时间差,两个以上才能求时间差。
做判断,如果时间 timeList.size>1 可以计算时间戳,否则 else 或1个返回“”和0。有两个时求最小时间差,将 ip 和最小时间差返回。
//两个以上的数据才能计算时间差
If(timeList.size>1){
//6遍历时间的 list,将此字符串类型国际时间转换成普通时间(时间戳)
//(ip,???)
}else{
(“”,0)
}