不会玩爬虫写代码,小白是如何爬天猫店抓数据的

在数据营销中,有效、及时地掌握第一手数据往往是基本中的基本。在电子商务中更是这样,了解竞争对手的动态可以让你更好地对自身产品、定价和表现形式进行优化。本篇我们将直奔主题提供一种简单的抓取天猫店数据的方法。

准备工作
我们将用到的是谷歌Chrome浏览器的桌面版,还有Chrome的浏览器插件Web Scraper。该插件可以在webscraper.io下载到,完全免费。

我们假设在Windows平台上,按F12。Chrome开发者工具会弹出。我们在菜单中选择最右边的Web Scraper先放在一边。至此准备工作已完成。
天猫店铺链接
我们打开天猫店铺总能看到全部商品分类的选项。我们选中后会带我们去和下面URL相似的地址。
https://sony.tmall.com/category.htm?spm=a1z10.5-b-s.w17695525-15102841353.2.1be86b1ednN0aS&search=y
上面URL中标红的参数spm并没有用,有用的是search还有未在上面出现的pageNo。前者永远为y,后者为页数。那么索尼官方旗舰店的第二页商品列表的URL就是
https://sony.tmall.com/category.htm?search=y&pageNo=2
而索尼官方旗舰店产品只有5页。所以我们先把这个URL规律和总商品页数记下来。
新建一个爬虫项目
我们回到Web Scraper。点击Create new sitemap。依次填入Sitemap name:sony-tmall和Start URL:https://sony.tmall.com/category.htm?search=y&pageNo=2。点击Create Sitemap按钮。

新建后我们会在有一个Add new selector蓝色按钮的界面。此处我们的位置为_root。
这里的selector的意思是CSS Selector即CSS选择器。我们在之前文章中详细介绍过。
建立选择器圈定商品
CSS选择器的作用是在HTML中定位。我们现在浏览器的地址栏中打开我们要爬的页面。然后点击刚才提到的蓝色按钮Add new selector。
我们首先要选的是页面元素,每个元素就是一个商品的长方形表示区域。在Id中填入item,在Type中选择Element后,我们点击Selector中的Select按钮。

当你的鼠标此时放到商品区域边缘时,该区域会高亮,点击后再按下面的蓝色按钮Done selecting!你会发现Data preview旁边已经自动输入了选择器。
如果此时你跟着马老师的节奏,你的选择器看上去会是这个样子:div.item5line1:nth-of-type(1) dl.item:nth-of-type(2)
启用Element preview按钮时,该块区域会再次高亮,先关闭它。接下去我们点上Multiple这个选框,没什么变化,这是因为我们的选择器只选择了一件商品。因此我们要手动进行修改,去掉一些过滤条件把它简化为div dl.item。
当我们再次启用Element preview时,就能看到所有商品区域都高亮了。

点击蓝色按钮Save selector保存。我们的第一个选择器就完成了。
抓取各商品的属性
上面我们只是对一个个商品单元做了定位,它们相当于你的数据表中的每一行。接下来每一列就是我们要在商品单元中真正抓取的数据了。我们大概需要抓取商品名称(title)、价格(price)、销量(sale)、评价(comment)这些数据。于是我们点入刚刚我们新建的选择器开始新建这些列。此时我们的位置在_root / item。
上述4个数据元素的选择器建立方法和我们上面的方法基本一致,为了节省篇幅我们只说一些区别。
- 类型(Type)不再选择Element而是Text。
- 由于每个单元中只有一个唯一数据源,因此不勾选Multiple。
- Parent Selectors记得选择item而不是_root。
- 评论的选择器中添加Regex:[0-9]+ 这是为了去掉“评价: ”而只保留纯数字。
最后我们要建一个产品ID栏——product_id。选择器为_parent_

保存完最后这个属性后,我们可以看到界面中有这些选择器,上面略过的所有选择器都在下图中列出,可直接使用:

点击_root回到上一层,然后点击蓝色按钮Data preview,我们就可以预览这个页面上我们要抓取的内容。

是不是感觉渐入佳境了?你会发现有几个商品的评论数为null,这是因为那些是页面底部的促销样式,我们可以在导出后在Excel中过滤掉。现在先不用处理。
多页面抓取和导出
你是否注意到我们只抓了第二页?别急,我们现在就来补完。你应该注意到页码2/5了。没错一共有5页。我们可以点击菜单中的Edit metadata来更改Sitemap的设定。

我们只要将Start URL改为https://sony.tmall.com/category.htm?search=y&pageNo=[1-5]就可以连续抓5个页面了,请放心食用。改完保存后就可以点选上图菜单中的Scrape,然后开始一路抓取。这里请注意,由于防爬虫机制如果你未登录天猫,那么过不了多久马爸爸会请你输入验证码。因此建议你保持登录状态。(至于登录后是不是会封号,请后果自负……)
爬完了点击refresh就可以看到抓取完的数据了。是不是满意呢?再次点击上图菜单中的Export data as CSV即可导出数据到Excel进行后续的分析处理,这里不再赘述。

最后,你可以点击Export Sitemap导出你新建的项目,便于备份分享。
总结+完整代码
我们的教程就到此为止了,天猫商铺、淘宝店、各种搜索结果都可以用这种方式来爬,只是选择器不尽相同,读者可以自己练习摸索。但是登录后的搜索结果千人千面是否有参考价值也有待商榷。
最后我们分享一下本次使用的实例。你可以通过Import Sitemap直接使用。但是极诣还是建议你对不同的天猫店进行更改,因为店的域名是不同的。
{"_id":"sony-tmall","startUrl":["https://sony.tmall.com/category.htm?search=y&pageNo=[1-5]"],"selectors":[{"id":"item","type":"SelectorElement","selector":"div dl.item","parentSelectors":["_root"],"multiple":true,"delay":0},{"id":"title","type":"SelectorText","selector":"a.item-name","parentSelectors":["item"],"multiple":false,"regex":"","delay":0},{"id":"price","type":"SelectorText","selector":"span.c-price","parentSelectors":["item"],"multiple":false,"regex":"","delay":0},{"id":"sale","type":"SelectorText","selector":"span.sale-num","parentSelectors":["item"],"multiple":false,"regex":"","delay":0},{"id":"comment","type":"SelectorText","selector":"h4 span","parentSelectors":["item"],"multiple":false,"regex":"[0-9]+","delay":0},{"id":"product_id","type":"SelectorElementAttribute","selector":"_parent_","parentSelectors":["item"],"multiple":false,"extractAttribute":"data-id","delay":0}]}