开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第一阶段:功能介绍数据处理详解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/669/detail/11585
功能介绍-数据处理详解
内容介绍
一.课题引入
二.案例演示
三.数据处理解析
四.结论
一.课题引入
先登入点击数据处理有查询预定的内容,查询里面有国际和国内,预定里也有国际国内。
二.案例演示
(1)以去哪网为例,默认选择从北京到杭州,点击查询,它会跳转界面给一些选择,这个过程是最普通,简单的查询业务。
查询以后有很多选择,随便选取一个最便宜的,点击,点击之后会有很多可以预定的,点击最便宜的,点击预定它会跳转另一个页面,另一个界面就是让填写一些乘客的信息。
本质上到了预定的环节,刚刚这里有预定的界面,然后现在已经跳转过。
国际也是一样的,国际的从北京到巴黎,这是查询,在查寻一下,现在触发了一个查询的动作,简单的一个查询,在选中一个,到了这个界面来看,实际上,到了一个直接订票,这个查询的动作,再往后到预定界面预定的界面不管这个动作是国内的还是国际的,它都分为查询和预定两种业务场景,也就是查询是一个业务场景,预定也是一个独立的业务场景,而查询又分为国内的和国际的,预定也分为国内的和国际的,这是以去哪网为例。
(2)再以南方航空为例,这里面是一个机票单程的,然后从广州这里到北京,日期随便选一个,然后开始查询。
这是一个查询的动作,然后再随便选择一个价位,下面他会给我一个选择,立即预定,不登录,直接购票,然后它就让添加一些乘客信息,那这个就已经走到了预定的阶段,也就是说不管是南方航空,去哪儿网,还是其他的一些公司,那实际上这个订票环节都为查询。一个查询分为查询和预订这两种情况,查询又分为国内的和国际的,预定也分为国内和国际的,这是反爬虫项目数据处理的业务场景介绍,也就是这些公司,去哪儿,携程,还有各家航空公司,他们提供的这个订票和查票业务当中,实际上都分为查询和预订,查询又分国内查询和国际查询,预定又分为国内预定和国际预定,查询预定分为这四种情况,两两组合。
三.数据处理解析
(1)案例演示
实际上以国内查询为例,这里面有很多种数据类型可以选,可以选这类型。
国内查询配置的是一个 form 表单,国内查询分为 Url 是^.*/B2C40/query/jaxb/direct/query.ao*$, 有乘机人数,儿童人数,婴儿乘机人数,有出发地,目的地,起飞时间,请求方法,这是国内查询,国际查询也是乘机人数,成人乘机人数,婴儿乘机人数,出发地目的地,起飞时间和请求方法,实际上这里面要解析这个业务需求,这个数据处理里面,重点及关注的是出发地和目的地,以及起飞时间,以及乘机人数,国内查询业务场景等、出发地、目的地、起飞时间分别用 $depcity、 $arr city 和$flightdata 来表示,乘机人数,婴儿人数,儿童人数是按照 $adultnum, $childnum, $infantnum 来表示。
再看一下国际的,点击一下看国际查询,同样是查询,下面一个是国内一个是国际,来看一下国际的,国际的里面出发地用的是 dep, 目的地是 arr ,起飞时间是data, 乘机人数是 adt, 婴儿乘机人数是inf,这有一个变化,就是国际的查询和国内的查询,他们表达同一个出发地目的地,它们表示的规则是不一样的,国内这个叫 depcity 而国际查询就叫dep。国内查询里面,目的地叫 arrcity, 飞行时间叫flight date。 而国际里面叫 arr 和 data。
预定也是一样的,预定也是有区别的,始发地,目的地,起飞时间没有,但是乘机人数,乘机人姓名,是有联系人的,这里要说的就是不同的业务场景,国内查询和国际查询,它们解析同一个数据解析的规则,是不一样的。国际查询用 dep、arr,而国内查询我用的是 depcity arrcity。 最终目标是要解析数据是用 dep、arr 解析还是用 depcity、arrcity、 解析实际上程序是不知道的。
接下来看一下 dep,还以南方航空为例,点击重新做一个查询的动作,然后把监控打开,然后出发地叫广州,目的地叫北京,这个时候起飞,然后查询一下,给出结果,给出之后,实际上找这个网络。
还有很多请求,然后找到一个叫 query 这里面有个 query 查询,查询里面有请求头信息,请求信息里有 Referer, (请求来源),User-Agent 等等的信息,这里面还有一个 cookie,cookie 里还有好多数据,数据里还有一个参数,参数中有一个depcity、arrcity 还有一个 flightData 数据当中传递的参数当中包括出发地,目的地,起飞时间,还有一些乘机人数,就类似于这样的这些信息。
业务场景目标是为了解析它。那解析这个目标,但是数据的程序不知道怎么解析,因为不同的业务场景看国内的是用 depcity 来解析,而国际的是用 dep 来解析,那到底该用哪个解析呢?实际上,程序是不知道的,那一定要把它解析出来业务需求。
(2)数据解析过程
看一下数据采集阶段,第一步罗马脚本进行采集,第二步把它发送到Kafka,而采集的数据里面是没有这些信息的,有这些信息,但是不知道怎么解析,如果要把它解析出来,就得首先要知道是哪一个业务场景,是国内查询还是国际查询?是国内预定还是国际预定?要先知道是这些类型当中的哪一种,如果知道是国内查询,就用depcity, 如果是国际查询就用 dep 解析。
所以在这里面要想解析这个数据,首先要知道这个数据到底是哪个业务类型,但是这个数据我们在采集的过程当中,不知道这个数据类业务场景,不知道在数据的处理过程中,这个数据采集里面没有任何消息,告诉出这条数据,这些动作它到底是查询的还是预定的,本身我们的程序在采集过来,发送到 Kafka 以及三杠一到我们数据预处理程序当中,没有任何消息表示这个数据到底是查询还是预定,国内还是国际,既然没有任何表示,,所以这里面就用到了这个 url,Url 在数据采集阶段,用户访问了哪个 url, 是完全可以拿到的,url 通过采集写到 Kafka,三杠一已经在这里面也能把这个 url 拿到,就是你用户访问了这个页面,这个页面有一个 url,这个 url 是肯定能拿到的。
拿到这个 url 以后再去用 url 和这个解析 url 的正则表达式和^.*/B2C40/query/jaxb/diect/query.ao.*$ 正则表达式匹配,采集过来的数据里面的 url 能够和这个正则表达式匹配上,那么就表示这条数据是国内查询,知道了是国内查询以后,就知道该用 depcity,arrcity,fightdata 去解。
如果数据第一步采集数据,第二步发送过去,第三部夺过来,采集过来的数据里面的 url 是能够和
^.*http://b2c.csair.com/ita/int/app.*$ 正则表达式匹配上,那么就表示这条数据是国际查询。
知道了是国际查询就知道是用 dep 解析出发地arr 解析目的地 data 解析起飞时间,起飞时间,这个界面就是用于匹配的作用,预定也是一样的,国内的还是国际的都先要拿 url 和相应的正则匹配,如果匹配上了,知道是国际预定,然后再用这几个内容来解析数据。就是我们反爬虫项目当中用于数据处理的配置界面的这个功能。
四.结论
实际上我们的数据在采集的过程当中,我们会采集到这个参数里面有这个出发的时间,出发地,目的地,以及起飞的时间,但这个时间呢,不在程序当中是不能直接解析出来的,因为数据当中的这些规则太多,出发地和目的地,起飞时间有好几种情况,不知道该用哪一个,所以在查询采集数据的时候能拿到 url,用 url 去和这四种业务场景分别配置了一个 UI 的正则。
采集过来的数据和配置的这个正则表达式去匹配,这四个挨个匹配,匹配到哪个就知道这个数据是哪一个业务场景。知道是哪个业务场景就知道该用哪一个去匹配。所以先通过 url 与正则表达式去匹配,匹配完了以后,知道了业务场景。就知道该用哪一种规则去解析出发地、目的地和起飞时间。
所以这个配置的目的就是要告诉,最终的目的是解析这些内容,但是为了要实现解析这些内容需要先找的这个数据的业务场景,然后才能去解析,那怎么找到呢?就通过采集过的 url 和这里面的正则匹配,匹配到哪个它就是哪个。
这个界面已经明确告诉
^.*/B2C40/query/jaxb/diect/query.ao.*$ 正则表达式就是国内查询的。而这个^.*http://b2c.csair.com/ita/int/app.*$ 正则表达式就是国际查询。
而这个^.*getRuleFromSuccessPage.ao.*$ 正则表达式呢?就是国内预定的,国际预定的那就是这个^.*ita/rest/int/b/order.*$ 等式啊。所以这个数据预处理阶段要干的事情就是这样一个事情,目的是解析这些数据。