PowerQueryAmazing Arch

用powerbi爬取安居客昆明所有楼盘详情页

2018-12-07  本文已影响19人  PowerQuery

方法一:powerbi爬取安居客

不得不佩服powerbi,真是入得洞房(你没看错,就是洞房,不是厨房)、上得厅堂,除了能够连接一百多种数据源,居然还是一个好用的爬虫。

第一步:确保power bi desktop是最新版并打开它。

第二步:在安居客网站找到昆明新房源的链接,复制备用。

第三步:新建一个来自于web的数据源。

添加Web源

注意上图中的位置3,要点击“使用示例添加表”。

第四步:手动添加需爬取的字段。

使用示例添加表

如上图所示,我们想爬取的第一个字段是楼盘名字,我们在“列1”第一行中手动输入想爬取的第一个楼盘名字。确保一一对应。

当你输入开头几个字时,powerbi desktop会智能地提示,双击提示,就会自动填充。

绝大多数时候,我们输入第一个楼盘名字之后,powerbi desktop就会智能地帮我们把其他楼盘名字依次填到“列1”。

添加需爬取的字段

如上图所示,灰色部分为powerbi desktop自动填充的。

如果输入第一个楼盘后,powerbi desktop没有自动填充其他楼盘,不用担心,这是因为power bi desktop还没找到规律,所以当你再写一个楼盘名字后,它就知道该怎么填充了。

点红圈处的*号可以增加爬取的字段列。双击列名称可以重命名,比如我将列重命名为“楼盘名称”、“价格”和“户型”。

确保所有要爬取的字段都列出来之后,点击确定,进入下一步。

第五步:加载或编辑爬取结果。

勾选自定义表

上一步确定后,进入上图的界面,点击“加载”,就可以查看爬取结果了。如果对自动抓取的结果不满意,可以点“编辑”,进入编辑查询界面,对查询语句进行修改。

第六步:翻页。

注意我们前面爬取的只是一页内容。一页只有几十个楼盘。昆明可是有几百个楼盘的,安居客用了8页来显示,因此,我们需要确保能把八页内容全部爬取下来。

所以我们在上一步点击“编辑”,进入查询编辑页面。

这里我们要分四步走:

首先是把刚才建立的查询重命名下,便于识别,比如我重命名为“base”。

其次要拿到总页数,这个好办。在左侧查询列表栏右键点击,新建一个空白查询。

总页数的查询

然后在公式栏输入“= {1..8}”,这表示新建一个包含1到8共8个元素的列表。列表不好操作,所以我们把它转化成表,在窗口左上角点“到表”。再把列格式设置为文本。

将页数查询转化为表

接着我们要把base变成一个函数。因为只有函数才能调用变量,而变量就是我们刚才做的表格里的8个页码数字。

点击菜单栏上的“管理参数”,新建一个page参数。

新建参数

然后把base查询的第一个操作步骤代码变成“= Web.BrowserContents("https://km.fang.anjuke.com/loupan/all/p" & page & "/")”

再右键选中base,在弹出菜单中选择“创建函数”(下面截图中是灰色的,是因为我已经用它创建了一个函数)。

创建函数

最后一步就是在页码表格中以新增一列的方式引用刚才创建的函数:

领导给我一周时间让梳理昆明所有楼盘的信息,我半小时就完成了

然后点击自定义列列标题旁边的展开符号,展开列,就得到我们想要的数据了:

领导给我一周时间让梳理昆明所有楼盘的信息,我半小时就完成了

第七步:查看爬取结果。

展开自定义列

上图就是我们爬取的结果,可以把它加载到数据模型,进行下一步处理,如统计汇总,或导出为csv格式发给领导。

看上去步骤繁多,但是对powerbi desktop操作熟悉的话,其实就是分分钟的事情。

实际操作中主要耗时在爬取网页内容上。

尾巴

上面的七步其实爬取的是楼盘列表页的楼盘信息。实际任务中我需要爬取每个楼盘页面上的信息。其实思路都是一样的:先爬取单个楼盘页面的信息,然后将其转化为函数备用;获取到楼盘的链接地址,将其作为参数传递给函数;而楼盘页面地址就可以直接从楼盘列表页中获取。所以我没有继续往下写具体的操作步骤了。

爬虫老手应该也注意到了,我没设置headers,也没有设置等待时间,然而并没有触发安居客的反爬机制,不知道powerbi desktop在背后怎么避免了触发反爬机制,或者只是我运气好?

上一篇下一篇

猜你喜欢

热点阅读