因为在Excel里面难以实现自动登录

今天介绍一种用PowerQuery爬取生意参谋数据的方法,只作学习用,拓展一下思维,切忌大量爬取生意参谋数据,以免被封!

需要用到M语言的几个函数:

Json.Document() 用来解析Json代码

Web.Contents(url,[Headers=headers,Query=query]) 用来获取页面数据

首先找到想要爬取的数据,此文以爬取生意参谋-首页-整体看板的数据为例。


想要爬取数据,首先要找到数据在哪里。

鼠标右击网页任意位置,选择“审查元素,或者”按F12健。


点击”Network”,然后点击”XHR”,数据就藏在左侧的文件中,可以依次点击查看。


发现数据在getTrend.json这个文件下,在Preview标签中可以看到我们要爬的数据。

接下来我们需要获取3部分内容,URL,Headers,Query。点击Headers标签。


标红的部分是我们需要的内容(Headers部分从cookie开始复制,前面部分不需要),为便于编辑,可以把这3部分内容分别复制粘贴到记事本。


上图对代码的含义做了简单说明。接下来需要将3段内容进行简单的处理,以便PowerQuery能够正确识别。

先把输入法切换到英文状态。


url部分用“”引起来。


Headers部分,冒号左侧的内容用引号引起来,左边加上井号;冒号右侧的内容用引号引起来,冒号替换成等于号;cookie、referer和user-agent这3段之间的换行符删掉,然后用逗号隔开;最后把整体用[ ]括起来。

这段没看懂没关系,下面再讲一遍。


冒号两端用引起来


左边加井号


冒号换成等于号


删掉换行符,用逗号隔开。


整体用方括号括起来

3部分内容加工完毕,接下来打开Excel。


点击“数据“选项卡-”新建查询“-”从其他源“-“空白查询”


此时打开了查询编辑器(PowerQuery),现在需要一个自动生成时间戳的列。点击“高级编辑器”


打开了高级编辑器,将等号右边的内容替换成以下内容:

Number.IntegerDivide(Duration.TotalSeconds(DateTime.LocalNow()-

#datetime(1970,1,1,8,0,0)),1)


点击“已完成”按钮。


出现了时间戳的字段,点击“到表”按钮。


变成了表格形式,将列名重命名成“时间戳”


单击列名左侧图标,将字段类型设置成文本。


在url和query代码中,需要把包含时间戳的字段进行替换,以识别成对应的单元格。



中括号两边用&连接,外面需要被引号引起来。

接下来最关键的一步,把要爬取的数据解析出来。添加自定义列。


在自定义列公式中输入

Json.Document(Web.Contents(url,[Headers=headers,Query=query]))


先不要着急点确定,需要把url,headers,query这3个单词替换成上文整理好的3段对应代码。


然后点击“确定”按钮。


出现警告,不必担心,点击“继续”。


在弹出的隐私级别窗口中,点击右侧下拉箭头,选择“公共”,点击“保存”。


解析出了Record字段。点击右边的双向箭头图标,点击“确定”按钮。


继续点击双向箭头图标,点击“确定”按钮。


继续点击双向箭头图标,点击“确定”按钮。


鼠标右击Record这一列的列名,选择“删除其他列”。


点击双向箭头图标,可以把使用原始列名作为前缀前面的勾去掉,点击“确定”按钮。


表格变成了这种形式,此时不能直接将数据展开,需要改变一下形式,将List字段变成一列。


将3列选中(先点击第一列列名,选中第一列,按住Shift健,再选中最后一列),点击“转换”标签中

的“逆透视列”按钮,进行逆透视。


变成这种形式,然后点击双向箭头按钮。


点击“扩展到新行”。


得到了我们想要的数据。

文章到此结束。

本文重点在于解析的过程,提供一种爬虫的思路,后续数据清洗和整理过程不再赘述。

本文只爬取了支付金额,想同时爬取更多数据,可以在indexCode=payAmt后面添加其他指标代码即可,如indexCode=payAmt,uv即可同时爬取支付金额和访客数。


最后提醒:切忌大量爬取生意参谋数据,以免被封!切记!切记!