开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段):数据预处理-航线类型操作类型-效果与总结】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/671/detail/11657
数据预处理-航线类型操作类型-效果与总结
内容介绍:
一、效果演示
二、总结
三、总结回顾
一、效果演示
1.运行查看效果
之前把判断是国内查询、国际查询、国内预定还是国际预定的代码写完了,接下来查看它的实际效果,进入到实际的代码当中,在代码中的:RequestTypeclassifier.classifyByRequest(requestUrl,broadcastRuleMap 处
调用,前面需要添加一个接收 val RequestType,RequestType 是一个 class,里面标记了数据到底是国内查询、国际查询、国内预定还是国际预定,接收过来以后它的数据类型是大写的 RequestType,数据采集完成之后是返回,返回到上面的 filterData 里面,然后又做了输出,以上就是爬虫数据预处理器打标签飞行类型和操作类型的实际的过程,效果如下:运行数据处理程序,发现提示报错。
2.检查并修改
检查错误原因,为数据库的错误方法:Unknow column international,提示为 QueryDB17行出错,可能是读取数据有问题,找到读取数据部分,双击打开查看是否存在错误,提示的错误是 main 方法当未知的列:international,在AnalyzeRuleDB 的第57行,International 后面缺少了.id,修改后右键重新执行,提示运行成功没有报错,也没有效果,没有效果是因为还没有进行爬虫,找到爬虫后右键执行,爬虫现在查询的是 query ao 的,query ao 代表的是expression 中的^.*query.ao.*$,query ao 的数据类型是00,即国内查询。国内查询应该是 National query,因为数据比较单一,爬虫比较单一,所以打出来的数据都是 National 系统,看到这个效果即可表明实际的打标签的过程完成了,而且效果也有了实现,返回的结果是 Request Type 里面的 National 国内的查询,以上就是反爬虫中打标签的第一个飞行类型和操作类型的实际效果。
二、总结
爬虫中数据分类的飞行类型和操作类型,把这个关键代码,关键代码如下:
第一步:读取数据库分类规则,详细的四种规则不进行一一写入,主要代码为:
var RuleMaps-AnalyzeRu
第二步:将规则加载到广告变量
@volatile var broadcastRuleMaps-sc.broadcast (RuleMaps)
读取规则实际代码是很多的,但是并不困难,实际就是读取数据库的规则后拿过来,只不过分为四种情况,四种情况都需要逐步去写,所以需要花费一定时间,具有一定的工作量。
第三步:在 redis 内添加是否需要更新数据分类规则的标识,每批次都从 redis 中读取这个标识,判断是否需要更新数据分类规则每天这个标记
第四步:更新标签。如果不需要更新就直接跳过,不需要额外添加代码,如果需要更新就将重新读取数据库的规则,代码为:RuleMaps-AnalyzeRuleDB.queryRulLeMap()
,然后将广播变量进清空,
代码为:broadcastRuleMaps.unpersiste
,重新加载新的规则到广播变程当中,
代码为:broadcastRuleMaps sc.broadcast (RuleMaps)
,并将其改为 false,
代码为:redis.set ("NeedupDateclassifyRule" , "false")
第五步:数据的分类。
首先定义方法:
val requestType:RequestType=
RequestTypeclassifier.classifyByRequest(requesturl,broadcastRueMaps.value)
然后进行四个业务场景的数据读取
//1先在分类的广播变量中获取四种业务场景的规则
//国内直询规则
val nqRuleList=RuleMaps.get("nqRuleList")
//国际查询规则
val iqRuleList=RuleMaps .get("iqRuleList")
//国内预定规则
val nbRuleList=RuleMaps.get ("nbRuleList")
//国际预定规则
val ibRuleList-RuleMaps.get("ibRuleList")
把这四种情况读取过来以后,遍历四种情况进行分析,这里只总结一个场景的遍历方法:
//遍历国内查询规则
for (nqRdle<-nqRuleList if flag){
//使用数据匹配国内查询的规则―若匹配成功表示这个ur1所在的数据就是“国内查询”
if (requestUr 1.matches (nqRule)){
flag=false
//到了这一步就可以断定这个数据的业务类型
requestType=RequestType(FlightTypeEnum.Nationa1,BehaviorTypeEnum.Query)
}
最终返回数据类型 requestType,这里不进行总结,记住在最后存在返回的动作即可。
三、总体回顾
要实现的目标是确定一条数据到底属于哪个业务场景,将四种情况(国内查询00、国际查询10、国内预定01、国际预定11)分析出来,分析过程为:在数据库中把四个业务场景规则全部读取,然后去遍历并放至广播变量中检查是否需要更新,然后用 url 和四个规则一一匹配,匹配上哪个规则该 url 就属于哪种规则,然后将结果返回即可,实际总体难度不大,但是这里面包含了四种情况,每一种情况都需要一步一步去实现,花费了一定的时间。这就是飞行类型-操作类型的实现过程。