本贴将学习一个抓取商品历史价格的案例。 目前,各大电商平台存在着同一商品价格不一的现象。商品历史价格爬虫可以获取同一商品在各个平台的历史价格,并通过历史价格预测出近期可能的降价空间。
目录
一、网页分析
1、分析查历史价的功能
2、分析搜索框功能
二、爬虫代码实现
1、爬取具体单品的历史价格
2、输入商品名称得到商品的历史数据
三、注意事项
1、出现报错的情况
2、 展望
电子商务的普及产生了大量的网上商店。用户在网上消费的时候,如果要购买一个产品,往往会选择价格最低的那个网上商店进行购买,由此产生了比价(Price Comparision) 网站。比价网站为消费者在网上找到最便宜、价格最合理的商品提供了极大的便利。
接下来,我们来看一下慢慢买比价网(慢慢买——购物比价网)的页面结构。
该网站需要登录才能使用,一次登录永久使用。在使用爬虫爬取数据前,需要提前登录。
在输入框输入需要查询的商品,这里以查询iPhone为例。 在页面功能标签页面,点击查历史价,会跳转到以下界面。
接下来我们将复制的网页链接粘贴在查历史价网页的输入框,点击查询即可商品的历史价格和优惠情况。
因此,我们一种爬虫实现方式就是基于获取商品网页链接然后将其粘贴在查询历史价网页的查询栏中来查询历史价。
在比价网首页输入iPhone,回车。如下图所示:
这里我们可以看到有各种各样的iPhone商品的情况,有当前价格、电商平台、评论条数等。这里我们还可以看到价格旁边有一个波浪箭头,我们把鼠标移到这个箭头可以看到一下情况:(有些箭头是不会立刻弹出这个历史价格的,可能会等到1-2分钟,才会出现,这是因为网站有些历史价格做传输响应服务较慢。但多试一会,会有箭头弹出的。)
因为,这里采用的是Ajax异步加载,把鼠标移到波浪箭头的位置,等弹出历史价格图后,在开发者工具的NetWork中可以看到有一个数据传输响应信息条目,打开这个条目可以看到dataPrice。这里就是商品的历史价格数据和优惠情况,所以这又一种爬取方式就是获取这个dataprice,把里面的数据提取保存下来。
接下来,我们来看一下另一种爬取方式(这个是上面说到的是基于查历史价的功能)。继续以iPhone为例,我们通过开发者工具的左上角有一个箭头,将它移到波浪箭头上,点击一下,会将这个波浪箭头的源代码所在位置显示出来,如下图所示。
这源代码的位置上的img标签中,我们可以看到波浪图标的url和图片属性。此外,在img标签的父节点为一个a标签,这里面有一个js的href属性,它就是用来显示商品历史价格功能。后面这个thref属性值就是该商品历史价格功能的结果,它是一个url。我们将它打开一下,看看有什么结果。
这里可以看到,我们得到了该商品的历史价格数据。因此,我们只需要提取到这个thref将其保存为一个html页面就可以看到商品的历史数据价格。
这个功能就是基于查看单个商品的历史价格趋势图,将里面的数据获取出来,生成一个csv表。这样的话每个时间的数据都将会事无巨细的显示出来,但这有一个最大的缺点就是不通用。只能针对某个单品进行查看下载,局限性太强。因为网站是采用Ajax异步加载的方式,每次都需要去获取数据传输的条目,才能进行模拟请求(因为每个数据条目的cookie和Useragent有些不一样,参数可能会发生改变)。
具体代码如下:
运行结果(部分截图):
这种方法是通过输入对应的商品名称,来获取其多种相似商品的信息。这是基于上面介绍的第二种爬取方式,借助查价网站来获取历史价格。
这种方法的通用性强, 很符合人们的需求。只需要通过输入商品名称的关键字,爬取相似商品的历史查价的网页链接,以html为后缀名将其放入。只需通过打开html文件,点击链接即可跳转到商品历史价格网页。在这个网页中有商品在电商平台的具体信息的url,通过url还可以看到商品的具体信息。
具体实现代码如下:
操作方法:
因为商品数据条目有很多,这里这是爬取第一页的信息数据。所以会存在爬取一部分数据后出现报错情况,但这是不影响的。因为我们的目的已经实现了。