大家好,我是零一,电商数据分析专家。
先打个广告,我在做电商最权威的数据分析社群,有每周原创的蓝海产品信息首发,帮助商家了解商机,有兴趣的欢迎来撩。
进入主题,用Excel采集数据并不难,用VBA或者Power Query都可以实现。采集淘宝100页的搜索数据也不难,但是如果指定用Excel就有点不好弄了。因为在淘宝反爬虫机制的作用下,100页也就是连续100次访问搜索结果页,这个就不好整了,没有想象中那么简单,但也没有那么难,也就两个重要的操作,了解了就不难了。
那么,我还是从头开始讲吧,不然这篇文章就沉了(大家都看不懂)。
简单归结,采集数据三个流程,分别是找数、采数和洗数。
找数是要从网页源码或者包中找到数据,找到数据所在才有目标URL。
以淘宝搜索为例,搜索了关键词茶烟之后,浏览器上的URL。
https://s.taobao.com/search?q=%E8%8C%B6%E7%83%9F&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306
在页面上点击鼠标右键,菜单中查看源或者查看源代码等,只要是表达这个意思就对了,因为不同的浏览器命名不同。
重要的一步,源代码页搜索前台看到的目标信息,比如标题,或者价格。
搜索得到说明数据就在这个URL中,因此上面的URL就是目标地址了。
但是这个时候只有一页的数据,而目标是100页,这又要如何构建呢?
s=44
s=88
s=132
通过观察2-4页的URL的差异,不难发现,页面是一个从0开始的以44为步长的等差数列。因此用Excel就很好实现了,生成100页的URL。
这样目标URL有了就可以进入下一个环节
采数是将目标URL的文件下载下来。
将链接加载到Power Query(查询编辑器)中
重点操作有两点,第一点是添加cookie,如果没有cookie就会要求登陆。
在开发者模式(网页按F12)找到文档的cookie,复制cookie的内容。
在Power Query中添加cookie的内容。
好了之后,就是下载数据了,下载数据用Web.Contents,Text.FromBinary是将文件转成文本,也就是我们在前台看到的HTML。
Text.FromBinary(Web.Contents([URL],[Headers=[#"cookie"=[cookie]]]))
但是此时还不行,哪怕有了cookie,在一定时间内过于频繁地访问淘宝搜索页也会被限制,因此所以有了第二个操作重点,就是加延时。
Function.InvokeAfter(()=>采集过程,Duration.FromText("00:00:05"))
很明显延时设置了5秒,正常人每一页停留时间应该不会低于20秒,设置5秒是为了避免cookie过期。
整合起来,整个函数就是
Function.InvokeAfter(()=>Text.FromBinary(Web.Contents([URL],[Headers=[#"cookie"=[cookie]]])),Duration.FromText("00:00:05"))
这样就可以下载100个网页文件,每个文件都是以文本形式存在。
洗数是从下载下来的文件中提取目标数据。
这不是我今天要讨论的内容,这个提取数据的过程可能要比前面下载网页还要难,所花费的时间可能是前面的2倍。
文终!
零一原创出版物
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/hlw/87554.html