Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
引言:
在 Power Query 中,当我们遇到复杂的数据结构,而 M 语言无法直接实现时,我们可以借助其他语言来实现。鉴于 Web.Page 与 HTML 兼容,我将使用 JavaScript 来执行正则表达式,这与使用 M 语言相比是一种更直接的方法。本例获取网络状态信息中的网络请求状态码, 即从[RequestInfo]中提取状态码。
正文:
1.了解Web.page返回的数据结构
最初,我们使用 Web.page 来检索数据。可以观察到,DOM数据被获取,其中包括额外的数组。
紧接着,我们可以继续向下查找数据。[Data] 默认的第一次钻取数组名称,{0}为获取该数组中的第一个数据,此处为下一层的数据对象。
= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0})
这一步我们会获取请求类型等数据:
使用下面的code钻取到该数据对象中的[Children]中的第一个数据对象。
= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0})
Name中的HEAD为请求头,BODY为请求体:
请求头
= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0}[Children]{0})
请求体
= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0}[Children]{1})
可以看到,请求体返回了我们需要的数据。
= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"')</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0})
我们可以输出返回的数据:
2.使用 JavaScript 正则表达式
按照上述步骤,我们可以轻松地在 HTML 环境中获取必要的数据。因此,我们唯一的要求就是编写所需的函数,以方便正则表达式的直接执行。如下,Custom列成功返回了RequestInfo列中的网络状态码。
= Table.AddColumn(#"Changed Type", "Custom", each Web.Page("<script>document.write('"&[RequestInfo]&"'.match(/\b\d{3}\b/g))</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0})
实现的要求是获取网络请求状态代码。显而易见,它由三位数字组成,因此条件是: /\b\d{3}\b/.
可以观察到,样本数据包含多个或单个状态代码,分散在不同位置,还包括 "32145 "等错误数据。使用正则表达式可以准确地筛选出这些数据。如果使用 M 语言,则可能需要使用 Text.Contains、Text.StartsWith 和 Text.EndsWith 等函数。特别是当数据分布不一致时,可能还需要使用 Text.Replace,这使得过滤过程的实现具有挑战性。
总结:
通过探索,我们可以使用该语句获取所需的数据:
Web.Page("<script>Your Fuction</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
M 语言中难以实现的功能,可以尝试使用 JavaScript 完成。
相关资料
Web.Page - PowerQuery M | Microsoft Learn
作者:常天意
指导:Ula&Kerry
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Subject | Kudos |
---|---|
2 | |
2 | |
2 | |
1 | |
1 |