因为在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即可同时爬取支付金额和访客数。
最后提醒:切忌大量爬取生意参谋数据,以免被封!切记!切记!