`
游牧民族
  • 浏览: 8122 次
博客专栏
0e19309f-3048-3b23-8de5-1a8a92dd847a
爬虫开发教程
浏览量:0
社区版块
存档分类
最新评论

手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动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);  
crawler.start(); 
 

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

 

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

分享到:
评论

相关推荐

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

    在本节课中,我们会学习如何处理电商网站尚妆网的AJAX请求,以及如何提取动态加载的内容。这是一个非常实用的教程,因为AJAX技术广泛应用于现代网页中,而动态内容加载也是电商网站常见的技术之一。 首先,我们需要...

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

    通过爬虫,可以快速有效地获取电商平台的商品信息、用户评价、价格动态、交易量等关键数据,这对于市场分析、竞品监测、价格监控等方面具有重要意义。本教程将引导初学者如何入门电商爬虫开发,以及相关的基础知识与...

    手把手教你学DSP--基于TMS320C55x光盘 + 书(高清).7z

    手把手教你学DSP--基于TMS320C55x光盘 (包括源代码 电路图PDF,DXP) + 基于TMS320C55x.PDF。比较适合刚入门,是一本DSP入门的好书。

    手把手教你写python爬虫

    本教程“手把手教你写Python爬虫”将引导你逐步掌握这一技能。Python因其语法简洁、库资源丰富,成为爬虫开发的首选语言。下面,我们将深入探讨Python爬虫的核心概念、常用库以及实践技巧。 首先,你需要了解网络...

    手把手教你学单片机--(如何学习单片机)

    手把手教你学单片机--(如何学习单片机)经典有用的资料

    手把手教你写 SQL Join 联接 -

    手把手教你写 SQL Join 联接 手把手教你写 SQL Join 联接 - Defonds 的专栏 - CSDN博客手把手教你写 SQL Join 联接 - Defonds 的专栏 - CSDN博客

    手把手教你写Python爬虫

    本教程将深入浅出地教你如何使用Python编写爬虫,让你从零基础快速入门。 首先,我们需要了解Python爬虫的基础知识。爬虫主要分为三个步骤:请求网页、解析网页和存储数据。Python中的`requests`库可以用来发送HTTP...

    手把手教你学DSP--基于TMS320C55x光盘 含电路图+代码

    手把手教你学DSP--基于TMS320C55x光盘 含电路图+代码 陈泰红 出 版 社:北京航空航天大学出版社 本书(作者陈泰红、任胜杰、魏宇)以TMS320C55x系列高性能低功耗DSP为主,主要介绍了以数字信号处理器(DSP)为核心的...

    手把手教你学51单片机-C语言版

    资源名称:手把手教你学51单片机-C语言版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    手把手教你学DSP--TMS320F28335

    扫描版,全书454页完整版,带书签,虽是扫描版但足够清晰,不影响阅读

    手把手教你学51单片机-资源

    《手把手教你学51单片机》是宋雪松先生编写的一本深入浅出的单片机学习教程,特别适合初学者入门。51单片机是微控制器领域非常经典的一款芯片,由Intel公司推出,因其8051内核而得名,现在由许多厂商如Atmel、...

    手把手教你学DSP:基于TMS320F28335

    手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F...

    手把手教你学51单片机C语言版PDF

    《手把手教你学51单片机C语言版》是一本专为初学者设计的教程,旨在帮助读者从零开始掌握51系列单片机的编程与应用。这本书由权威的电子技术教育平台www.kingst.org提供,是学习单片机C语言编程的宝贵资源。下面将...

    手把手教你学DSP--TMS320C281X光盘资料

    "手把手教你学DSP--TMS320C281X光盘资料" 这个标题表明这是一个教学资源,专注于数字信号处理(DSP)领域,特别是针对Texas Instruments(TI)的TMS320C281X系列DSP芯片。"手把手教你学"意味着这份资料提供了详尽的...

    手把手教你学dsp--TMS320C55X

    《手把手教你学DSP--TMS320C55X》是一本深入浅出的数字信号处理(DSP)教程,特别关注TI公司的TMS320C55X系列芯片。这本书旨在帮助读者理解DSP的基本概念,并通过实践操作学习如何在TMS320C55X平台上进行开发工作。...

    C# SuperSocket 手把手教你入门 傻瓜教程-9(CountSpliterReceiveFilter - 固定数量

    1、C# SuperSocket 手把手教你入门 傻瓜教程---9(CountSpliterReceiveFilter - 固定数量分隔符协议)使用COMMAND 2、客户端发送字符串“#LOGIN#part1#part2#part3#part4#part5#part6#" 3、KEY关键字为LOGIN(创建了...

    C# SuperSocket 手把手教你入门 傻瓜教程-4(创建一个最简单的服务器和多客户端双向通信程序)

    最简单的服务器和多客户端双向通信程序,压缩包内有SocketTool.exe程序,方便使用测试服务器和客户端进行通信。教程参见https://blog.csdn.net/ba_wang_mao/article/details/115672920

Global site tag (gtag.js) - Google Analytics