前言:
现在大家对“python爬网页表格”大概比较讲究,各位老铁们都需要分析一些“python爬网页表格”的相关文章。那么小编在网络上汇集了一些对于“python爬网页表格””的相关知识,希望大家能喜欢,小伙伴们一起来了解一下吧!前面介绍PowerBI数据获取的时候,曾举了一个从网页中获取数据的例子,但当时只是爬取了其中一页数据,这篇文章来介绍如何用PowerBI批量采集多个网页的数据。
本文以智联招聘网站为例,采集工作地点在上海的职位发布信息。
下面是详细操作步骤:
(一)分析网址结构
打开智联招聘网站,搜索工作地点在上海的数据,
下拉页面到最下面,找到显示页码的地方,点击前三页,网址分别如下,
;sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=1
;sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=2
;sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p=3
可以看出最后一个数字就是页码的ID,是控制分页数据的变量。
(二)使用PowerBI采集第一页的数据
打开PowerBI Desktop,从网页获取数据,从弹出的窗口中选择【高级】,根据上面分析的网址结构,把除了最后一个页码ID的网址输入第一行,页码输入第二行,
从URL预览中可以看出,已经自动把上面两行的网址合并到一起;这里分开输入只是为了后面更清晰的区分页码变量,其实直接输入全网址也是一样可以操作的。
(如果页码变量不是最后一位,而是在中间,应该分三行输入网址)
点击确定后,发现出来很多表,
从这里可以看出,智联招聘网站上每一条招聘信息都是一个表格,不用管它,任意选择一个表格,比如勾选Table0,点击编辑进入Power Query编辑器。
在PQ编辑器中直接删除掉【源】之后的所有步骤,然后展开数据,并把前面没有的几列数据删除。
这样第一页的数据就采集过来了。然后对这一页的数据进行整理,删除掉无用信息,添加字段名,可以看出一页包含60条招聘信息。
这里整理好第一页数据以后,下面进行采集其他页面时,数据结构都会和第一页整理后的数据结构一致,采集的数据可以直接拿来用;这里不整理也没关系,可以等到采集所有网页数据后一起整理。
如果要大批量的抓取网页数据,为了节省时间,对第一页的数据可以先不整理,直接进入下一步。
(三)根据页码参数设置自定义函数
这是最重要的一步。
还是刚才第一页数据的PQ编辑器窗口,打开【高级编辑器】,在let前输入:
(p as number) as table =>
并把let后面第一行的网址中,&后面的"1"改为(这就是第二步使用高级选项分两行输入网址的好处):
(Number.ToText(p))
更改后【源】的网址变为:
";sm=0&sg=fe782ca83bfa4b018d27de559d0a5db0&p="&(Number.ToText(p)))),
确定以后,刚才第一页数据的查询窗口直接变成了自定义函数的输入参数窗口,Table0表格也变成了函数的样式。为了更直观,把这个函数重命名为Data_Zhaopin.
到这里自定义函数完成,p是该函数的变量,用来控制页码,随便输入一个数字,比如7,将抓取第7页的数据,
输入参数只能一次抓取一个网页,要想批量抓取,还需要下面这一步。
(四)批量调用自定义函数
首先使用空查询建立一个数字序列,如果想抓取前100页的数据,就建立从1到100的序列,在空查询中输入
={1..100}
回车就生成了从1到100的序列,然后转为表格。gif操作图如下:
然后调用自定义函数,
在弹出的窗口中点击【功能查询】下拉框,选择刚才建立的自定义函数Data_Zhaopin,其他都按默认就行,
点击确定,就开始批量抓取网页了,因为100页数据比较多,耗时5分钟左右,这也是我第二步提前数据整理造成的后果,导致抓取比较慢。展开这一个表格,就是这100页的数据,
至此,批量抓取智联招聘100页的信息完成,上面的步骤看起来很多,实际上熟练掌握以后,10分钟左右就可以搞定,最大块的时间还是最后一步进行抓取数据的过程比较耗时。
网页的数据是不断更新的,在操作完以上的步骤之后,在PQ中点击刷新,可以随时一键提取网站实时的数据,一次做好,终生受益!
以上主要使用的是PowerBI中的Power Query功能,在可以使用PQ功能的Excel中也是可以同样操作的。
当然PowerBI并不是专业的爬取工具,如果网页比较复杂或者有防爬机制,还是得用专业的工具,比如R或者Python。在用PowerBI批量抓取某网站数据之前,先尝试着采集一页试试,如果可以采集到,再使用以上的步骤,如果采集不到,就不用再耽误工夫了。
现在就打开PowerBI或者Excel,尝试着抓取你感兴趣的网站数据吧。
标签: #python爬网页表格 #如何爬取多个网页数据