html文件下载代码(html实现文件下载功能)

– 1 –

Excel PQ网爬功能的问题

以前,在讲解用Excel的Power Query抓取网站内容的时候,主要使用Web.Page函数来提取其中的表格内容,但是,这个函数有很大的缺陷。

比如,我们通过国家统计局网站提取2021年的行政区域划分数据(http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/index.html),你会发现:

很多说明性的内容和省份的信息都是混在一张表里的

无法直接提取省份对应的链接信息

html文件下载代码(html实现文件下载功能)

还有很多时候,网页的内容其实并不是表格,这时,就需要通过函数Web.Contents函数将网页的源代码读出来,再通过Lines.FromBinary转换成行或用文本函数或进行各种拆分、提取,才能从其中分离出所需要的内容,如果内容相对复杂,要提取数据则非常麻烦!

对网页结构代码不了解的朋友,可以先看一下以下视频,同时了解原来的数据提取方法:

– 2 –

PBI智能识别功能及其问题

现在,Power BI提供了智能识别的功能,可以提供很好的辅助,我们先用上面的例子进行操作,然后去看这个智能识别功能的原理是什么,并且学会怎么去调整和改进。

Step-01 从Web获取数据,输入网址后,即可看到按钮“使用示例添加表”:

Step-02 填选内容与智能识别、填充

在“使用示例添加表”中,在下方的表格中,填写2-3项需要提取的信息后,Power BI会自动识别出“同类”的信息进行填充:

如果发现后续自动填充的内容不是自己想要的,那可以继续输入或选择,Power BI会随着选填的内容不断更新自动填充的内容,直到确认填充的内容是自己想要的后,单击“确定”按钮即可:

Step-03 转换数据

同时,我们也可以看到,这个自动识别出来的内容并不全,所以,我们必须要深入了解这个数据提取方法背后的原理,然后通过适当的修改,最终提取到所有我们想要的数据。

– 3 –

Html.Table函数及其原理

示例中的网页代码(去掉因直接放在函数内需要增加的多余双引号)其实比较简单,复制到文本文件里并修改扩展名为.html,用浏览器打开,代码对应的效果如下:

接下来我们看一下Html.Table后面的参数:

1、行筛选器:[RowSelector=”.name”]

这个参数会决定提取结果中的“行”数,其中“.name”表示:按照属性class为name的每一个网页元素产生每一行。

这段网页代码里,只有一个元素的class属性值为name,所以,最终结果只有1行。

2、列名及数据选择:{{“Name”, “.name”}, {“Title”, “span”}}

这个参数是一个列表,列表里每1项代表1列,每1项由“{列名,取值筛选器,取值方式}”3项内容组成。

其中,第3项可以省略,省略的情况下,代表直接取网页元素中显示的值,如果要取网页元素对应的属性(如背后的链接等),在后面的例子里进行说明。

如前面的代码,最终得到结果表为:

如果我们把要提取内容的网页代码改为下面的样子:

仍然用同样的选择器,提取的结果将如下图所示:

结合网页代码、网页显示结果及提取结果,解析如下图所示:

[RowSelector = “.name],确定结果表有2行

{“Name”,”.name”},确定第1列列名为“Name”,取class为name的元素的值

{“Title”,”span”},确定第2列列名为“Title”,取class为name元素后面的第1个span元素的值

– 4 –

实战及参考资源下载

再回到文章开始提到的提取省份名称及链接的例子,自动生成的步骤代码为:

Html.Table( 源, {{“列 1”, “.provincetr:nth-child(4) > TD”}, {“列 2”, “.provincetr:nth-child(4) > TD > A:nth-child(1):nth-last-child(1)”, each [Attributes][href]?} }, [RowSelector=”.provincetr:nth-child(4) > TD”])

其中使用到的筛选器包括以下几个:

对照网页源代码,其中的选择器对应元素如下:

再仔细观察,Power BI自动生成的代码之所以只取了部分数据,是因为我们实际上需要提取所有class为provincetr下的td项,而不区分到底取哪一个位置的,所以,我们可以直接去掉限制:nth-child(4),最终修改如下:

其中第2列取网页链接的代码中,使用了第3个参数:each [Attributes][href],这就是对于不直接取元素对应的网页上显示信息,而是取相关属性的用法。

但是,要注意的是,目前[Attributes]后接具体属性仅支持[href]和[src],对于其他属性,不要直接加上属性名称,而是用 each [Attributes]提取所有属性后,再在Power Query中进行提取操作即可。

这个CSS选择器是不是非常强大?对于网页源码的内容简直是想怎么取就怎么取啊!!!

但是,前面的例子里,就貌似用了好多个不同的选择器,如“.name”、“span”等等,那到底还有什么其他可用的选择器?具体怎么用?这才是关键的问题!

实际上,Html.Table函数所使用的选择器,遵循W3C(万维网联盟)标准,可以在w3school里找到,为方便大家查阅,我已下载好并做成Excel文件,下载链接见文末:

如果看文档,官方给的类型就有60个!

不过,不用怕,就像Power Query里有900多个函数一样,你根本就不可能需要都学会,比如,用的多的就这么6个:

一般来说先理解这几个关键的就好了,真遇到其他情况,再查阅,碰到特别特别棘手的情况,再找人一起研究就是了。

Html.Table函数选择器、示例及说明文档

链接:https://pan.baidu.com/s/1A4Y4ZaO3SuUdg0e0ZKF6Gg

提取码:dhai

– 最新热门文章/合集-

精选20篇Power Automate从基础到实战!

精选100 篇Power Query从初学到进阶!

60 篇Power BI打好数据建模及分析基础

最全391个官网Power BI自定义图表对象

150 份Power BI主题模板一次性下载

-最通俗易懂Power系列视频-

购书领60元视频券 or 直购视频送签名书

发表评论

登录后才能评论