数据预处理-数据解析-确定解析规则思路及效果|学习笔记

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 快速学习数据预处理-数据解析-确定解析规则思路及效果

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段数据预处理-数据解析-确定解析规则思路及效果】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/671/detail/11662


数据预处理-数据解析-确定解析规则思路及效果


内容介绍:

一、代码实现

二、代码执行


一、代码实现

前面完成了规则的读取,并加载到了广播变量里,解析的代码也完成了如下:

val queryRequestData =

AnalyzeRequest.analyzeQueryRequest( requestType,

requestMethod,contentType,requestUrl,requestBody,travel

Type, broadcastQueryRules.value)

这一行代码就能把规则解析出来,它是怎么解析的?

这里定义了一个方法,叫 queryRequestDate,这里面调用了一个叫 analyzeRequest,然后这里面有一个叫 analyQueryRequest。它后面括号里传了这么几个参数,先来看一下参数 requestType ,它是前面解析好的是飞行类型还是操作类型的标签。后面这个是 requestMethod 和 contentType ,还有 requesturl 都在前面做的数据拆分里面。

//数据拆分功能

val(requesturl ,requestNethod ,contentType ,requestBotdy,

httpReferrer ,remoteAddr ,httpUserAgent ,timeIso8601,

serverAddr ,cookiesstr ,cookievalue_JESSIONID,

cookievalue_usERID) =Datasplit.datasplit(encryptedId)

上面的代码就包含了之前需要的所有参数,所以做数据拆分,就是因为后续的计算会反复的用到这些数据。如果每次用它的时候再来拆分,就会很麻烦。所以做数据拆分就是一劳永逸了。

Traveltype 是刚刚计算出的单程和往返的标签。然后还有广播变量 broadcastQueryRules,因为这里面解析的是查询类的数据,广播变量的读取规则代码是:

//将规则加载到广播变量

@volatile var broadcastQueriyRules=sc.broadcast(queryRule)

image.png

因为这里面也是查询类的数据,也就是说把查询类的这三个规则,也就是把 behavior_type 等于零的读过来。读过来以后就是参数。广播变量放到这个方法里。那么这个方法是什么意思?

先看 analyzeRequest。这个就是解析数据的代码,它是已经写好的。

数据解析方法里面需要的几个参数也是前面算好的,因为解析数据要用到这几个参数,所以直接把参数传到这个方法里就行。

这里面有一个 analyzeQueryRequest ,也就是下图的这个方法:

image.png

它是来解析查询类的数据的,不同类型的数据根据不同的解析规则来进行解析。

怎么解析?刚刚读过来的规则是查询类的,而现在里面有三种情况,所以查询类的 query 也有三种情况。

image.png

目的是解析这个数据,那现在有三种选择,只能用一个。

所以下面的代码告诉了方法:

val queryRequestData: QueryRequestData = new

QueryRequestData

//数据库中有四条解析规则,我们需要通过传过来的这一条数据,确定数据凡配上的解析规则,然后用这个解析规则解析数据

val matchedRules = analyzeRules.filter { rule =>

//先根据请求方式和请求类型过滤出是属于查询的规则

if (rule.requestMethod .equalsIgnoreCase(requestMethod)

&& rule.BehaviorType ==requestTypelabel.behaviorType.id)

true

else

false

}

看里面的 analyzeRules ,就是最后一个参数。

这里有一个 filter ,用filter 去过滤,现在有三个规则,那么最起码要过滤两个。

这里有一个 analyzeRules.fliter 它是在数据库里查出来的,在数据库当中有一个 request method ,是三个数据库中的第一个指标的。判断代码是:

rule.requestMethod .equalsIgnoreCase(requestMethod)

看下图:

image.png

这个是判断是否相等的。用之前计算的 requestMethod 跟数据库里面配置出来的 requestMethod 比较。因为计算的数据都是 post 那让它和数据库里面的 post 比较,不等于的就返回 false 然后过滤掉。所以现在是有三种选择,这里面通过的 requestMethod 都是 post 。而数据库的第三个规则,也就是图中第四行是 get ,那么它就要被过滤掉。这样就从三个选择变成了两个选择。

看下一个,Rule.behaviorType 也就是这里面的 behavior_type。

image.png

这个标记的 Requesttypelabel ,就是前面计算的 Requesttype。

也就是说,数据库当中的 behaviorType 等于数据计算出来的behaviorType的id。

数据库里面的 behaviorType 是0,而现在的数据已经确定都是国内查询,也就是behaviorType是查询型的,那么这里面拿到的一定是0。所以两个都是0,也就没有过滤掉数据,所以到目前为止还是两个数据,如果这两个条件都满足,就返回 true ,不然就返回 false。

下面就是上述方法的代码:

if(rule.requestMethod.equalsIgnoreCase(requestMethod&&

rule.Behavior==requestTypeLabel.behaviorType.id)

true

else

false

还剩下两条数据,这时就要用到 filter 。调用 request,也就是之前解析的requesturl。

代码如下:

.filter { rule =>

//然后根据url正则表达式,过滤出是属于国内查询还是国际查询 request.matches(rule.requestMatchExpression)

requestMatchExpression 这个字段就在数据库当中。

如下图所示:

image.png

它是正则表达式。那用数据传过来的解析出来的 url 去匹配它的规则,如果匹配上就是 true,没匹配上就是 false 。

这里面有一个 app 有一个 query.ao,而数据过滤完以后,

val DataProcess= filteredData.map( message=>{

过滤后的数据都是 query.ao ,所以这个 query.ao 能匹配上返回 true ,app 就无法匹配返回 false 。经过这个操作,从两个选择,就成功的从两个选择里面。从这两个选择里面变成了只有一个选择。这样就明确到底该用哪一个规则来解析数据。此刻就用 depcity, arrcity,flightdate 来解析。

image.png

后面的代码就是来实现数据的解析的。按照这一批数据的规则来解析,解析完了以后出发地、目的地和起飞时间就都有了。后面的代码就是解析的过程,但是太多这里就不进行展示。


二、代码执行

解析完以后来看一下实际的效果。

//3对数据进行解析(在多种解析规则的情况下,确定最终使用哪一个规则进行解析)

val queryRequestData =

AnalyzeRequest.analyzeQueryRequest(requestType,

requestMethod,contentType,requesturl,requestBody,

travelType, broadcastQueryRules.value)

这个解析完以后接收回来的数据。把这个数据输出一下。

val queryRequestData = AnalyzeRequest .

analyzequeryRequest(requestType,requestMethod,contentType,requesturl,requestBody,travelType,

broadcastQueryRules.value)

val data= queryRequestData match {

case Some(datas)=> datas.depcity}

data

先随便先给个数据,做一个输出。这里返回出发地打出来。打出来以后,在前面做一个接收(val data =),然后对 data 进行一个返回。

执行这个代码看一下是不是能够把出发地解析出来。

然后把爬虫跑起来,看一下效果。

.add(new BasicNamevaluePair(

name:"json",

value: "{(\ "depcity \" : \ CAN\",\"arrcity\" : “WUH\",\“flightdate\":\"2018220\",\"adultnum)":\"1\",

这样如果解析结果正确,就会输出 CAN,看下面的结果:

image.png

爬虫的 depCity 是 CAN,这样就说明解析正确。

再来把出发地改成起飞日期:

case Some(datas)=> datas.flightDate}

日期是20180220,

然后再次执行,看下面结果:

image.png

所以起飞日期就被解析出来了。这样就把解析的工作做完了。

所以 case Some(datas)=> datas 中的数据想要哪个都可以拿到

image.png

解析数据就解析完成了,把程序和爬虫停掉。

相关文章
|
14天前
数据解析之xpath 太6了
数据解析之xpath 太6了
|
18天前
|
存储 弹性计算 缓存
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
阿里云服务器ECS提供了多种通用型实例规格族,每种规格族都针对不同的计算需求、存储性能、网络吞吐量和安全特性进行了优化。以下是对存储增强通用型实例规格族g8ise、通用型实例规格族g8a、通用型实例规格族g8y、存储增强通用型实例规格族g7se、通用型实例规格族g7等所有通用型实例规格族的详细解析,包括它们的核心特点、适用场景、实例规格及具体指标数据,以供参考。
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
|
10天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
82 11
|
2天前
|
前端开发 Python
解析数据的Beautiful Soup 模块(二)
解析数据的Beautiful Soup 模块(二)
10 1
|
16天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
14天前
|
XML 编解码 JavaScript
从浏览器的解析规则认识XSS防御
从浏览器的解析规则认识XSS防御
26 2
|
1月前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
|
24天前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
123 6
|
2天前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
16 0
|
2天前
|
XML 数据格式 开发者
解析数据的Beautiful Soup 模块(一)
解析数据的Beautiful Soup 模块(一)
16 0

热门文章

最新文章

推荐镜像

更多