下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.8 Power Query导入Web数据

Power Query导入的Web数据其实就是爬虫数据,当然利用Power Query实现数据爬取有一定的限制,不是所有的Web数据内容都支持爬虫的。

我们知道Python可以进行爬虫,其实在Power BI或Excel中也能实现一些基本的爬虫功能,只是效率没有那么高。在进行互联网爬虫过程中,最重要的步骤就是分析网页的页面结构,网页的结构再复杂,都逃不开下面提到的这个网页基础架构。

■ Document:网页中最大的对象,网页中所有的对象都是它的子对象。

■ Body:网页中的主体数据容器,通常数据爬取的内容都在Body容器中。

■ DIV:DIV是层的标签,层的标签可以位于网页中的任何位置。

■ Table:位于网页中表格内的标签,有Table标签意味着有表格容器。

这四个对象在网页结构中的包含关系如图2.71所示。

图2.71 网页中的元素关系

理解了网页中的Web结构之后,在大多数情况下使用网页爬虫爬取数据的时候,其实爬取的是网页元素中Body标签中的数据。在使用Power Query的过程中,Excel能够爬取的内容和Power BI爬取的内容略有不同。Excel 支持网页中存在标准的表格数据内容的爬取,如果网页中不存在如下的标签,Excel是无法进行数据爬取的。

■ Table 标签下的TR和TD标签。

■ Table 标签下的 Tbody标签。

而在Power BI中,支持爬取的数据标签更加灵活,下面的标签都是可以通过Power BI进行数据爬取操作。

■ Span 标签内容。

■ DIV 标签内容。

■ Table 标签中的TD和TR内容。

■ Table 标签中的Tbody 内容。

Power BI为什么支持更多的标签内容爬取呢?这是因为Power BI支持以自定义模板的方式进行数据内容的爬取,而Excel需在网页中解析出来Table标签才能够进行爬取,其他的内容均无法进行爬取。

2.8.1 Excel 实现Web的数据获取

在使用Excel的Power Query进行数据爬取时存在一定的限制,如果页面中不存在类似Table和Tbody这样的标签,无法进行数据的爬取。以今日头条的网站首页为例,基本上所有的页面都是使用DIV结合CSS去写的,这里通过Excel进行数据获取,看下会产生什么结果。首先开启Excel界面,在界面中的“数据”选项卡中单击“自网站”按钮进行数据获取,这里会弹出对话框让我们输入进行网页数据爬取的网址,如图2.72所示。

图2.72 网站获取数据的路径

单击“确定”按钮后进入数据返回界面,需要注意的是,在Excel中进行数据获取解析,如果出现如图2.73所示的数据,则无法进行任何数据内容的提取,Excel会在网页中查询是否存在Table标签来判断是否可以获取到数据,没有Table标签的数据无法使用Excel进行提取。

图2.73 获取数据之后的状态

下面以东方财富网的基金网页为例,首先确定在这个页面中要存在Table标签。除了直接进行Excel获取数据尝试外,还可以通过在浏览器上按[F12]键查看网页的代码进行查看。在Chrome浏览器中,按[F12]键进入开发者模式,然后选中一个看起来像表格一样的格式,如图2.74所示。

图2.74 网页中的Table表格

通过按[F12]键展现的源代码显示了图2.75框选部分的对象特性,这里在代码中可以确定当前的网页数据中存在Table,而Table是Excel进行网页数据获取的前置条件,如果不能解析成相应的数据,则无法通过Excel进行详细的数据获取。

图2.75 带有Table标签的表格

确定了页面中存在Table标签,就确定了当前的网页可以通过Excel进行数据内容的爬取。接下来就可以单击Excel数据界面中的Web网站,在弹出的界面中输入如图2.76所示的网址。

图2.76 网页输入界面

单击“确定”按钮后就会发现,Excel解析出网页界面中的多个Table标签,进入Web解析的表格选择界面,在网页中可能存在一个表格,也可能存在多个表格,表格的数量取决于实际解析出来的表格数量,图2.77为解析之后的结果。

选中需要导入的表格数据,如果需要导入多个表格,选中“选择多项”复选框后再选择需要导入的表格。单击“转换数据”按钮之后进入Power Query编辑器界面,在其中可以进行数据的再处理,如图2.78所示。

图2.77 使用Excel 进行网页解析的结果

图2.78 Power Query编辑器

完成了数据的清洗和重构之后,Excel 支持将最终的数据实现多项输出,通过“加载到”菜单可以实现数据的保存。

2.8.2 Power BI实现Web的数据获取

Power BI提供了两种数据获取的方式,前一种数据获取方式和Excel进行Web 数据获取方式相同,直接通过查询Table 方式进行网页数据的获取,操作也与Excel完全相同。另外一种方式是通过CSS选择器方式进行Web的数据获取,使用Power BI进行数据获取的CSS选择器能够帮助我们获取通过传统方式无法获取到的数据。

当然不是所有内容都适合通过CSS提取方式获取数据,这里以亚马逊Power Shell 搜索页面为例,在Power BI中采用传统的方式打开连接进行数据获取,这里数据来源选择“从网页”,在弹出的界面中输入如图2.79所示的网页地址。

图2.79 Power BI 获取网页内容设置

所有的网页第一次连接都会进行连接验证,对于公开访问的网页,可以选择匿名数据访问来进行网页的数据访问和数据爬取,如图2.80所示为匿名方式连接。

图2.80 网页连接权限设置

完成数据连接之后会展现出两种不同的类型数据,一种是按照Excel 传统方式获取的数据,我们称为HTML表格,通常在HTML表格中获取不到有效的数据;另外一种是基于Power BI特有功能获取的数据,我们称为建议的表格。当前建议的表格是Power BI分析相关的页面获取的数据,这时候它分析出来的界面和我们预期需要的数据有很大不同,如图2.81所示的内容是以HTML表格方式获取的数据。

图2.81 Power BI获取到的模板数据和表格数据

这些数据杂乱无章,并不是我们预期想要的内容。这里使用自定义模板的方式提取需要的数据,在这种模式下通过自己构建的示例表模板来智能完成数据的爬取,单击如图2.82所示的“使用示例添加表”按钮来实现数据构建。

图2.82 选择使用示例添加表提取数据

选择基于模板的数据爬取之后,会弹出“使用示例添加表”的窗口,这里就是根据CSS选择器完成需要的数据构建,图2.83所示为使用基于示例的数据访问页面。

图2.83 基于示例添加的数据访问内容

进行CSS提取有个非常重要的概念,就是标签和类的提取,这里在第一列中提取3~5行就可以完成基本的书名提取。

书名提取完成之后将列更改为“书名”,然后通过列选择器筛选出当前网页当中书名列的标签选择器。在弹出的上下文菜单中可以看到非常多的数据内容,这时选择如图2.84所示的书名信息保存。

图2.84 在表格中选择对应的书名

通常一行数据无法完成标签的选取,这里可以多输入几行相近的内容进行完整定位。在完成第二行的数据提取后,其他的标题都顺利地显示出来了,图2.85显示了当前页面获取的所有书名。

图2.85 当前页面的书名列

第一列的数据获取完成之后,就需要开始获取第二列和第三列数据。这里将第二列数据定义为“作者”,操作如图2.86。在这个过程中需要注意的是,我们提取作者可能需要的也是多行数据,才能确定提取的是“作者”列的信息。

图2.86 第二列数据的获取和填充

完成第二列的数据获取之后,接下来添加“评分”和“价格”等数据列。最终完成后表格中获取到当前需要的所有示例数据,如图2.87所示。

图2.87 表中相对应的所有行列数据

完成相应的示例数据获取之后,接下来需要将数据以自定义示例数据的方式保存下来。进入数据预览界面,单击“转换数据”按钮进行数据格式的设置,如图2.88所示。

图2.88 自定义数据构建

进入Power BI界面后,基于当前的数据进行再次清洗和重构,重构完成之后的数据保存在Power BI的缓存中。我们可以通过Power BI主页界面中的表格页面数据来预览保存的缓存数据,图2.89所示为完成数据清洗和重构后完成的数据。

图2.89 最终收集完成后的数据

这里我们来看看高级编辑器的内容,这里数据获取与Python的网页爬取很类似。这里同样使用的是CSS选择器选择相应的数据,如图2.90所示。

图2.90 Power Query高级编辑器中的内容

●Tips

注意,在进行网页爬虫时,一定要注意不得用于违法目的。 6DEHhQ1cni20+xabUeo3Gi2ivylXu8Yqc5WNKCWIH9huXQNJOmNJdJBTJlE/9p/3

点击中间区域
呼出菜单
上一章
目录
下一章
×