文档章节

手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫

游牧民族
 游牧民族
发布于 2016/05/12 16:50
字数 1647
阅读 245
收藏 2

「深度学习福利」大神带你进阶工程师,立即查看>>>

系列教程

手把手教你写电商爬虫-第一课 找个软柿子捏捏

如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相信大家都应该对写爬虫的流程有了一个大概的了解,那么这课咱们就话不多说,正式上战场,对垒尚妆网。

首先,向我们被爬网站致敬,没有他们提供数据,我们更是无从爬起,所以先安利一下尚妆网:

经营化妆品时尚购物,大数据为驱动,并依托智能首饰为入口的新一代智慧美妆正品电子商务平台。其创始团队来自天猫、支付宝、欧莱雅、薇姿等互联网公司和化妆品集团。

好吧,我很懒,直接从百度知道里抄过来的,不过不代表我没有诚意。OK,言归正传,我们先把我们的工具包拿出来:

1、神箭手云爬虫框架,2、Chrome浏览器 3、Chrome的插件XpathHelper 不知道是干嘛的同学请移步第一课

古代战士上战场前,必须先好好的观察对手,所谓知己知彼,百战不殆。我们先来观察一下尚妆网

从首页大家能看出什么?说美女很美的,还有说美女表情很到位的同学,你们可以先回家了。

剩下的同学,我们继续了:

可 以看出,作为一个完善的电商网站,尚妆网有着普通电商网站所拥有的主要的元素,包括分类,分页,主题等等。首先我们要确定我们希望要爬取哪一类数据,当然 作为爬虫来说,全部爬下来不是不行,不过对于做实验来说,就没必要了。好,我们假设:我们要爬护肤里的面膜品类所有商品,价格和销量,至于为什么是面膜, 你们猜呢?

废话太多了,我们开始爬虫三步走,跟着我再背诵一遍:1、选入口Url 2、限定内容页和中间页 3、写内容页抽取规则

1、选定入口url

这个简单,找到面膜页面的地址:http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C

好,就是它了。

2、区分内容页和中间页

好,重点来了,尚妆网的列表页面,是通过ajax动态加载了,这个怎么实现呢?我们先不着急,先看下内容页

http://item.showjoy.com/sku/26551.html

http://item.showjoy.com/sku/100374.html

内容页很简单,我们直接提取成正则表达式

http://item\\.showjoy\\.com/sku/\\d+\\.html

那么列表页呢?首先,第一个当然是:

http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C

下一页的链接是什么呢?这个时候就需要借助chrome浏览器的开发者工具,我们打开工具,切换到network选项卡,向下滑动加载下一页,可以看到展示出的连接地址:

注意,可以忽略掉png这些图片的文件,直接看到下一页的连接,我们将链接复制出来:

http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C&stock=1&page=4&_synToken=59a6c555b0947486769f35d010353cd5

看着好像很复杂,不过page我认识,其他的可以去掉吗?我们试一下访问

http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C&page=4

貌似正常打开,而且也可以显示不同的商品,就此我们可以看出来,这个ajax加载下一页不过是一个纸老虎,根本没什么可怕的。我们将这个提取成正则表达式,另外 值得注意的是,由于我们第一页可能是没有page的,所以也需要考虑没有page参数的情况

http://list\\.showjoy\\.com/search/\\?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C(&page=\\d+)?

这里再次提醒大家,注意正则的点和问好都是要转义的,并且转义需要两个\,好,第二步大功告成。

第 三步:就是写内容页的抽取规则了,我们就抽取商品名称,评价数和成交数这三项数据吧,有人要问了,为啥不要价格呢。我只能说,too young too native,你打开商品页面的时候,有没有注意到价格的地方也一个快速的异步加载。考虑到咱们毕竟才第二课,而且刚刚还没那个ajax搞得虎躯一震,差 一点把这节课改成第三课,所以咱们这里先降低点难度,下一课咱们用一节课的时间来探讨下这个价格该怎么提取。

根据前面课程教的方案,我们同样的方法,写出xpath:

标题://h3[contains(@class ,"choose-hd")]

评价://div[contains(@class ,"dtabs-hd")]/ul/li[2]

成交记录://div[contains(@class ,"dtabs-hd")]/ul/li[3]

通过xpath helper进行验证之后没有问题,这样我们可以组合代码得到下面的结果

    var configs = {  
        domains: ["www.showjoy.com","list.showjoy.com","item.showjoy.com"],  
        scanUrls: ["http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C"],  
        contentUrlRegexes: ["http://item\\.showjoy\\.com/sku/\\d+\\.html"],  
        helperUrlRegexes: ["http://list\\.showjoy\\.com/search/\\?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C(\\&page=\\d+)?"],//可留空  
        fields: [  
            {  
                // 第一个抽取项  
                name: "title",  
                selector: "//h3[contains(@class,'choose-hd')]",//默认使用XPath  
                required: true //是否不能为空  
            },  
            {  
                // 第二个抽取项  
                name: "comment",  
                selector: "//div[contains(@class,'dtabs-hd')]/ul/li[2]",//使用正则的抽取规则  
                required: false //是否不能为空  
            },  
            {  
                // 第三个抽取项  
                name: "sales",  
                selector: "//div[contains(@class,'dtabs-hd')]/ul/li[3]",//使用正则的抽取规则  
                required: false //是否不能为空  
            }  
        ]  
    };  
      
    start(configs);  

 

可以看到在domains里 我填入了三个域名,这里是一定要注意的,因为他的列表页和详情页的域名都不一致,因此需要把每一个域名都写进去。

好了,代码运行正常,但是启动任务之后发现,怎么第二页的内容没有采集到呢? 还有前面说的价格咱们也采集不到,到底还能不能愉快的玩耍了呢? 我们第三课就给大家讲讲如何解决ajax页面的url发现和ajax加载内容的提取。

对爬虫感兴趣的童鞋可以加qq群讨论:342953471。

游牧民族
粉丝 9
博文 9
码字总数 14295
作品 0
杭州
私信 提问
加载中
请先登录后再评论。
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
opm-server-mirror

代码更新 2009-11-25: 加入反爬虫功能。直接Web访问服务器将跳转到Google。 使用方法 下载index.zip 解压index.zip得到index.php 将index.php传到支持php和cURL的国外服务器上 打开 http:/...

luosheng86
2013/01/29
1K
0
实时分析系统--istatd

istatd是IMVU公司工程师开发的一款优秀的实时分析系统,能够有效地收集,存储和搜索各种分析指标,类似cacti,Graphite,Zabbix等系统。实际上,istatd修改了Graphite的存储后端,重新实现了...

匿名
2013/02/07
3.1K
1
基于 ThinkPHP 的内容管理系统--歪酷CMS

歪酷网站管理系统(歪酷CMS)是一款基于THINKPHP框架开发的PHP+MYSQL网站建站程序,本程序实现了文章和栏目的批量动态管理,支持栏目无限分类,实现多管理员管理,程序辅助功能也基本实现了常见的文...

鲁大在线
2013/02/19
7.1K
2
浏览器中的scheme解释器--SchemeScript

一个用javascript实现的scheme解释器,可以运行在浏览器中或node.js中。 刚刚看到编译原理与实践第二章,一时兴起,想写个以前就想写的scheme的解释器。昨天晚上开始写,到刚才为止,接近一天...

zoowii
2012/11/01
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

红队之windows用户和组

目录 0x01 用户账户和组策略 0x02 Windows中的访问控制 0x03 安全标识符SID 0x04 用户账户控制(UAC) 用户帐户 用户帐户是对计算机用户身份的标识,本地用户帐户、密码存在本地计算机上,只...

黑白天安全团队
昨天
9
0
厉害了!百度智能云NIRO Pro智能机器人半年内连获三项产品设计大奖

短短半年内,百度智能云NIRO Pro智能机器人连获三项产品设计大奖,其中包括有“设计界奥斯卡”之称的德国红点奖,成功引领了全球助理机器人的工业设计和发展趋势风向标。红点奖评委这样评价,...

百度智能云
2019/12/04
0
0
StringBuider 在什么条件下、如何使用效率更高?

作者:后青春期的Keats cnblogs.com/keatsCoder/p/13212289.html 引言 都说 StringBuilder 在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差。最近我在测试数据...

Object_Man
今天
0
0
发布更新|腾讯云 Serverless 产品动态 20200813

一、云函数 SCF + Ckafka 联合转储方案正式发布 发布时间: 2020-08-06 产品背景: SCF + Ckafka 联合转储方案可以帮忙用户节省使用与开发成本,用户可以将 Ckafka 消息转储同步转储至消息队...

腾讯云Serverless
31分钟前
5
0
如何正确强制执行Git推送? - How do I properly force a Git push?

问题: I've set up a remote non-bare "main" repo and cloned it to my computer. 我已经建立了一个远程的非裸露的“主”仓库,并将其克隆到我的计算机上。 I made some local changes, u......

javail
33分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部