|

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

爬天猫商铺?就这么简单
爬天猫商铺?就这么简单

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

这或许是最简单的爬虫方法
这或许是最简单的爬虫方法

准备工作

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

安装完Web Scraper可以在Chrome右上角找到图标
安装完Web Scraper可以在Chrome右上角找到图标

我们假设在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时,就能看到所有商品区域都高亮了。

Checkpoint,看下是不是做对了
Checkpoint,看下是不是做对了

点击蓝色按钮Save selector保存。我们的第一个选择器就完成了。

抓取各商品的属性

上面我们只是对一个个商品单元做了定位,它们相当于你的数据表中的每一行。接下来每一列就是我们要在商品单元中真正抓取的数据了。我们大概需要抓取商品名称(title)、价格(price)、销量(sale)、评价(comment)这些数据。于是我们点入刚刚我们新建的选择器开始新建这些列。此时我们的位置在_root / item

上述4个数据元素的选择器建立方法和我们上面的方法基本一致,为了节省篇幅我们只说一些区别。

  1. 类型(Type)不再选择Element而是Text
  2. 由于每个单元中只有一个唯一数据源,因此不勾选Multiple。
  3. Parent Selectors记得选择item不是_root
  4. 评论的选择器中添加Regex:[0-9]+ 这是为了去掉“评价: ”而只保留纯数字。

最后我们要建一个产品ID栏——product_id。选择器为_parent_

注意Type和Attribute name
注意Type和Attribute name:data-id

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

这就是我们要抓取的每个商品的5个属性
这就是我们要抓取的每个商品的5个属性

点击_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进行后续的分析处理,这里不再赘述。

导出后的数据长这样,记得删去评论为null的记录
导出后的数据长这样,记得删去评论为null的记录

最后,你可以点击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}]}

类似文章