网页缩小以后样子就变了_用Excel/Power BI/Power Query能爬取网页数据?3/3

前几天,小小逛问答的时候,给自己留了个坑。说要写文介绍一下怎么用Excel/PBI来爬网页数据,前天写了三篇中的第一篇,昨天写了三篇中的第二篇,所以。。。可以推导出来今天大结局么?嘿嘿。


日常数据分析工作中,我们可能常常需要从网上抓一些数据来辅助自己的分析。那么除了简单的复制粘贴之外,我们有没有其他的办法来完成这件事呢?或者说,有没有更灵活,更简单,自动化程度更高的办法呢?有。

我们用工具来抓的数,往往不只简单的一页,而是包含N多页。那么在点击下一页,或者末页的时候。有两种情况。

第一种情况是点击下一页的时候,网址变了(a)。

第二种情况是点击下一页的时候,网址没变。而网址没变的情况,又分为两种,一种是在你点击下一页的时候,实际上一段Java script运行了(b)。另一种情况是,只是你看到的表象发生了变化(c)。

这三种情况的难度由难至易为(b)>(a)>(c),(c)和(b)的解法,请参考下面的链接。然后我们今天再聊聊(a)。本篇较长,没空的小伙伴可以先收藏,慢慢再看。有空的小伙伴,也可以收藏,以备查找时方便。

丁小小Jia:用Excel/Power BI/Power Query能爬取网页数据?1/3​zhuanlan.zhihu.com
丁小小Jia:用Excel/Power BI/Power Query能爬取网页数据?2/3​zhuanlan.zhihu.com

先来看下演示用的数据。

https://www.quanthockey.com/khl/seasons/2017-18-khl-players-stats.html

因为这个系列我们讲的是三种不同的情况。所以用了三个不同的数据源来演示,大家以后也可以先判断遇到的数据是哪种情况,然后选用对应的方法。

示例数据的预览如下。

4d3a69849362dcca1e3a649f1c05e06f.png

小小点开的那个下拉菜单,是可以选择的年份。我们选择不同的年份,可以看到,网址是变的。

e5355943dbb83004aaf3ce905aa0b610.png

关于这个问题,昨天的文里,讲过了怎么解。

可是,这个表格其实有很多页,如果我们点击第N页的时候,会发现,网址并没有发生变化。请看。第11页和第15页的网址,是一毛一样的。

df5d4dd664ef010b7e6c57330a081c9b.png

94f78ab2fb12d6c69c99185af67054c9.png

造成这个现象的原因是,我们在点击下一页的时候,网站用了JavaScript来刷新我们需要的数。再细我也不说了,因为并不是本文的重点。

现在我们遇到的问题主要是以下两点:一是换页的时候,网址不变。二是不知道多少页。当然我们可以转到最后一页,看看是第几页,可如果这个数据在增加,以后变成N+1页呢?有没有不需要改代码就可以完成的方式呢?

我们一个一个来解决。首先我们需要下载一个工具。后面我再说为什么要下载。这个工具叫作Fiddler。下载地址在这里。https://www.telerik.com/fiddler

安装完成,打开后,应该可以看到下面的界面。

8bad70c69d67a9731d13adb39e3b7691.png

点击Inspector这个页签(上图中高亮的),可以看到下面一行Please select a single web session to inspect。

此时打开浏览器,粘贴网址。本文演示用的是Edge,其他的也可以。

4f5bffb539226d3ca8bcda166c536d5b.png

上面那一行蓝色的,是重点。我们按下图把URL复制到Excel中,看一下。(复制到其他能粘贴文本的地方都可以)

0448c085a1079a7f90bf78a4fb8ab323.png

得到的结果是这样子的。

03e614b9c412316122709427124bc189.png

好像只是一个网址。跟我们复制的没什么区别。而我们看到的也只是网页默认的第一页数据。我们继续点击该网址上显示的第2页,重复上述操作。再点击第3页,重复上述操作。再点击第4页,重复上述操作。然后得到了这样的结果。

7ea4714ab73fb8cff664c916b7162734.png

有没有发现,网址变了,而且有规律的变了?哈!是的,我们解决了这个网址不变的问题。那是不是就可以按照上一篇文的办法捞数据了呢?且慢,我们还有一个页数未知的问题没有解决。

懒得看解法的同学,可以直接跳到最后一步找代码。想了解过程的同学,可以跟小小一起做。前面已经详细讲过怎么用参数来拿数据,所以这里只是快速过一遍。想看细节的伙伴们请移步上一篇。https://zhuanlan.zhihu.com/p/144932623

我们打开Power Query Editor,新建一个参数,命名为PageNumber,并将其类型设为小数。Current value设为1。

616af2b9460bd62cd6af02f7c9b58628.png

然后我们依然按照传统的从网页拿数据的套路,但是在粘贴网址的时候,不是一味的粘贴了。请看图。

4b942a0db72e556b2886b4064742c3ce.png

这里需要注意的一点是我们网址的第二部分。此处需要手动输入这段包含参数的代码。但是如果先用上一篇文章提到的办法把数据先下载进来,再建参数,那么网址的那一段,就可以在下拉列表里面选择。还有一点就是,前面我们把参数的类型设为小数,这里需要再把它变成文本,在网址里面才可以正常起作用。为何要这样操作,后面会提到。

然后我们得到了下图。点击右上角的表格。注意,是点击带下划线的Table,而不是右上有展开表格的那个双箭头。

926b92c5c58ff625653509f782b082fc.png

点Continue,得到下图。请注意,我们只得到了第一页的50条记录。

35b7fce8e5a235a335f12046621b9a0e.png

打开高级编辑器。看到的代码是这样。

b076519fb03144bea9608326fa2b51a1.png

改成下图这样。其实只是增加了一行。增加的这一行,将这条查询变成了公式。然后将其改名为Fx。

1c10e78b97f904c5fcdf7102c02ecb42.png

这之后,再新建一个空白查询。在公式栏输入以下代码。注意在公式栏输入的话,是有"=",打开高级编辑器再输入的话,无需"="。

= List.Generate( () =>
[Result= try Fx(1) otherwise null, Page= 1],
each [Result] <> null,
each [Result= try Fx(Page) otherwise null, Page = [Page] +1],
each [Result]
)

将我们刚刚建好的这个列表,改名为All。得到下图。

b0a724877aa7fdbf64f3c40dbbc2b68b.png

然后我们将它转换为一个表。再展开。

65d310dbedc3d16cdb3e1a64fa26fdcb.png

然后就可以关闭并上载啦。

3aea43a939d3aeb3469084602f9cb249.png

写在后面的话。

哇,终于写完啦!希望看到的小伙伴们都能在不久的将来用到这些小技巧,帮助你们更轻松的完成工作。小小在写的过程中,常常在多包括细节和不要太啰嗦之间挣扎。如果哪里写得不够详细,请在评论中指出。小小再来增加。

还有小伙伴们说,这明明就是EXCEL,哪里有PBI?因为这里的操作主要是在PQ里面进行,EXCEL和PBI的PQ百分之九十九相似,所以演示的时候,就选择了一个来操作了。

大家还想看什么,欢迎留言哦,我会尽快在新的更新中,包括留言中的话题。

喜欢小小的请点赞,关注。小小在此谢过啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值