手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染

系列教程:

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

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

手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取

老规矩,爬之前首先感谢淘宝公布出这么多有价值的数据,才让我们这些爬虫们有东西可以搜集啊,不过淘宝就不用我来安利了

广大剁手党相信睡觉的时候都能把网址打出来吧。

工欲善其事,必先利其器,先上工具:

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

好了,咱们还是先打开淘宝网:

清新的画面,琳琅满目的商品,隐约感到的是前方是一场恶战:

淘宝这么多的商品,这么多的主题,到底从哪里开始呢?要不就女装了,别问我为什么,咱们先打开一个女装的列表页面:

https://s.taobao.com/list?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F

我们点击一下下一页看看连接:

https://s.taobao.com/list?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F&bcoffset=-4&s=60

看着好像不难,很简单,不过值得注意的是,我们把鼠标移到下一页可以看到连接本身并不是这个,这个是js处理的,这种情况类似前面我们遇到的尚妆网下一页,我们一会再说。

我们再看下详情页

https://item.taobao.com/item.htm?spm=a217f.7283053.1997524073.204.hEmtfc&id=527101625954&scm=1029.minilist-17.1.16&ppath=&sku=&ug=#detail
https://item.taobao.com/item.htm?spm=a217f.7283053.1997524073.209.hEmtfc&id=528697742170&scm=1029.minilist-17.1.16&ppath=&sku=&ug=#detail

看着比较简单,就直接提取成:

https://item\\.taobao\\.com/item\\.htm\\?.*

我比较懒,这个就先这样吧,然后我们来看看详情页我们需要抽取哪些信息,商品名称,价格自然不能少,这次再来一个新鲜的,就是缩略图列表,因为淘宝的商品不只有一个缩略图,因此需要爬取一个缩略图数组。

同样,用chrome开发者工具和xpathhelper对抽取项进行分析,看了一下结果,尝试过滤xhr,结果:

高手就是高手,在大量的请求中,找到响应的请求,相当的困难。不要紧,还记得我们上节课提到的核武器吗-JS渲染引擎,只要我们把JS渲染引擎打开,那么我们完全不用操心大量ajax请求的判断,当然他的问题是效率低一些,不过没关系,反正在云上跑嘛,睡一觉就好了。

在神箭手里调用JS渲染引擎的方式很简单,只需要一行代码设置既可:

configs.enableJS=true

好了,那我们现在可以无视ajax请求了,直接用chrome工具打开,直接提取:

//em[@id="J_PromoPriceNum"]

简单暴啦,然后高兴没有1秒钟,瞬间蒙逼,淘宝上的价格不仅有这种促销价格,还有价格区间,还有的是普通的价格,我的天的,这不是要人命吗~

没办法,再难也要硬着头皮上,目前来看,一共有两种价格的抽取方式,当然不排除有其他多种的情况,我们先对这两种分别写一下抽取规则:

//em[@id="J_PromoPriceNum"]  
//em[contains(@class,"tb-rmb-num")]

我们可以通过 | 这个来连接,表达不同页面的选取可以共存

//em[@id="J_PromoPriceNum"] | //em[contains(@class,"tb-rmb-num")]

不容易。我们再看看商品名称,这个相对简单:

//h3[contains(@class,‘tb-main-title‘)]/@data-title

最后,我们需要抽取图片的地址:

//ul[@id="J_UlThumb"]/li//img/@src

由于这一项存在多项,因此需要将该抽取规则的repeated字段设置成true

var configs = {  
    domains: ["www.taobao.com","item.taobao.com"],  
    scanUrls: ["https://www.taobao.com/go/market/nvzhuang/citiao/taozhuangqun.php"],  
    contentUrlRegexes: ["https://item\\.taobao\\.com/item\\.htm\\?.*"],  
    helperUrlRegexes: ["https://www\\.taobao\\.com/go/market/nvzhuang/citiao/taozhuangqun.php"],//可留空  
    enableJS:true,  
    fields: [  
        {  
            // 第一个抽取项  
            name: "title",  
            selector: "//h3[contains(@class,‘tb-main-title‘)]/@data-title",//默认使用XPath  
            required: true //是否不能为空  
        },  
        {  
            // 第二个抽取项  
            name: "price",  
            selector: "//em[@id=‘J_PromoPriceNum‘] | //em[contains(@class,‘tb-rmb-num‘)]",//默认使用XPath  
        },  
        {  
            // 第三个抽取项  
            name: "thumbs",  
            selector: "//ul[@id=‘J_UlThumb‘]/li//img/@src",//默认使用XPath  
        },  
    ]  
};  
var crawler = new Crawler(configs);  
crawler.start();

好了,虽然淘宝比尚妆网难的多,但是在我们拿出核武器之后,一切迎刃而解,回头我们在来处理下一页的问题,这里虽然和尚妆网不一样,但是整体的原理大同小异,就不一一解释,我们直接上代码:

var configs = {  
    domains: ["s.taobao.com","item.taobao.com"],  
    scanUrls: ["https://s.taobao.com/list?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F"],  
    contentUrlRegexes: ["https?://item\\.taobao\\.com/item\\.htm\\?.*"],  
    helperUrlRegexes: ["https?://s\\.taobao\\.com/list\\?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F.*"],//可留空  
    enableJS:true,  
    fields: [  
        {  
            // 第一个抽取项  
            name: "title",  
            selector: "//h3[contains(@class,‘tb-main-title‘)]/@data-title",//默认使用XPath  
            required: true //是否不能为空  
        },  
        {  
            // 第二个抽取项  
            name: "price",  
            selector: "//em[@id=‘J_PromoPriceNum‘] | //em[contains(@class,‘tb-rmb-num‘)]",//默认使用XPath  
            required: true //是否不能为空  
        },  
        {  
            // 第三个抽取项  
            name: "thumbs",  
            selector: "//ul[@id=‘J_UlThumb‘]/li//img/@src",//默认使用XPath  
            repeated:true  
        },  
    ]  
};  
configs.onProcessHelperUrl = function(url, content, site){  
    if(!content.indexOf("未找到与")){  
        var currentStart = parseInt(url.substring(url.indexOf("&s=") + 3));  
        var start = currentStart + 60;  
        var nextUrl = url.replace("&s=" + currentStart, "&s=" + start);  
        site.addUrl(nextUrl);  
    }  
    return true;  
};  
var crawler = new Crawler(configs);  
start();

OK 大功告成,测试结果如下,由于开启的js渲染,所以爬取的速度比较慢,只能耐心等待了。

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

时间: 05-16

手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染的相关文章

手把手教你写电商爬虫-第五课 京东商品评论爬虫 一起来对付反爬虫

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染 四节课过去了,咱们在爬虫界也都算见过世面的人,现在再来一些什么ajax加载之类的小鱼小虾应该不在话下了,即使是淘宝这种大量的ajax,我们 祭上我们的核武器,也轻松应对了,这一课主要是来看看除了技术上的页面处理外,我们还会遇上更棘手的问题,就是反爬虫,当然现

手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取

系列教材: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的小菜鸟晋升为中级菜鸟了,好了,那我们就继续我们的爬虫课程. 上一课呢一定是因为对手太强,导致我们并没有完整的完成尚妆网的爬虫. 吭吭~,我们这一课继续,争取彻底搞定尚妆网,不留任何遗憾. 我们先回顾一下,上一课主要遗留了两个问题,两个问题都和ajax有关. 1.由于是ajax加载下一页,导致下一页url并不会被系统自动发现. 2.商品页面的价格是通过a

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

系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相信大家都应该对写爬虫的流程有了一个大概的了解,那么这课咱们就话不多说,正式上战场,对垒尚妆网. 首先,向我们被爬网站致敬,没有他们提供数据,我们更是无从爬起,所以先安利一下尚妆网: 经营化妆品时尚购物,大数据为驱动,并依托智能首饰为入口的新一代智慧美妆正品电子商务平台.其创始团队来自天猫.支付宝.欧莱雅.薇姿

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

话说现在基本上大家都在网上买东西,国家经济数据已经可以在网络购物的数据中略微窥见一二,再加上目前B2B行业的持续火爆,大有把所有交易搬到网上来的趋势,这个系列教程就来讲讲如果爬取这些大量的电商交易的数据. 工具要求:教程中主要使用到了 1.神箭手云爬虫框架  这个是爬虫的基础,2.Chrome浏览器和Chrome的插件XpathHelper 这个用来测试Xpath写的是否正确 基础知识:本教程中主要用到了一些基础的js和xpath语法,如果对这两种语言不熟悉,可以提前先学习下,都很简单 教程正式

《手把手教你实现电商网站开发》课程学习总结

地址:http://www.imooc.com/learn/100 这是一个纯HTML/CSS的教学视频,没有JS. 这个视频课程的学习我已经接近尾声了,我大概是17年11月开始观看学习的吧,断断续续的看,断断续续的学,只记得那时才刚接触前端,也才刚看完W3school上的HTML.CSS和JAVASCRIPT基础教程,然后懵懵懂懂的在慕课网筛选HTML/CSS,再筛选了下初级教程视频,就点开了这个视频,刚看没多久我感觉真心难啊,但看着初级难度我还是坚持下来了,到现在已经有半年多了,一个算是略有

手把手教你写网络爬虫(1):网易云音乐歌单

把之前发表在微信公众号的爬虫系列文章迁移过来,热热身,就当备份了. 手把手教你写网络爬虫(1) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好,<手把手教你写网络爬虫>连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意.本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻松的入门方式.请跟随我们一起踏上爬虫学习的打怪升级之路吧! 介绍 什么是爬虫? 先看看百度百科的定义: 简单的说网络爬虫(Web crawler)也叫做

手把手教你写网络爬虫(3):开源爬虫框架对比

手把手教你写网络爬虫(3) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 介绍 大家好!我们从今天开始学习开源爬虫框架Scrapy,如果你看过<手把手>系列的前两篇,那么今天的内容就非常容易理解了.细心的读者也许会有疑问,为什么不学出身名门的Apache顶级项目Nutch,或者人气飙升的国内大神开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度: Project Language Star Watch Fork Nutch Java 1

[原创]手把手教你写网络爬虫(8):乱码

手把手教你写网络爬虫(8) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 字符编解码是爬虫里必学的一项知识,在我们的爬虫生涯中早晚会爬到乱码的网页,与其遇到时惊慌失措,不如早学早好,彻底避免乱码问题. 字符编码简介 什么是字符集 在介绍字符编码之前,我们先了解下什么是字符集. 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集:

手把手教你写专利申请书/怎样申请专利

手把手教你写专利申请书·怎样申请专利 摘要小前言(一)申请前的准备工作    1.申请前查询    2.其它方面的考虑    3.申请文件准备(二)填写专利申请系列文档    1.实际操作步骤    2.详细操作    3.经验分享.注意事项(三)关于费用(四)其它的话參考资源提示常见问题的问与答 摘要: 怎样写好专利申请?由于非常多专利申请人都是第一次申请,因此,可能有一种神奇和些许恐惧.本文写的是怎样写专利申请书,手把手教你写专利申请并提供申请专利时的注意事项,专利申请费用及费用减缓等相关參