手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动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渲染,所以爬取的速度比较慢,只能耐心等待了。
对爬虫感兴趣的童鞋可以加qq群讨论:342953471。
手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染的更多相关文章
- 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取
版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的 ...
- [原创]手把手教你写网络爬虫(4):Scrapy入门
手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...
- [原创]手把手教你写网络爬虫(5):PhantomJS实战
手把手教你写网络爬虫(5) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好!从今天开始,我要与大家一起打造一个属于我们自己的分布式爬虫平台,同时也会对涉及到的技术进行详细介绍.大 ...
- [原创]手把手教你写网络爬虫(7):URL去重
手把手教你写网络爬虫(7) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 本期我们来聊聊URL去重那些事儿.以前我们曾使用Python的字典来保存抓取过的URL,目的是将重复抓取的UR ...
- 手把手教你写基于C++ Winsock的图片下载的网络爬虫
手把手教你写基于C++ Winsock的图片下载的网络爬虫 先来说一下主要的技术点: 1. 输入起始网址,使用ssacnf函数解析出主机号和路径(仅处理http协议网址) 2. 使用socket套接字 ...
- 手把手教你写Sublime中的Snippet
手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜 ...
- 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)
唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...
- 只有20行Javascript代码!手把手教你写一个页面模板引擎
http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...
- Android开发之手把手教你写ButterKnife框架(三)
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了, ...
随机推荐
- 韦东山yy公开课笔记(2)--汇编,段,栈,重定位/链接地址,位置无关吗
1. 要不要学习汇编 可以只懂一点,工作中基本不用,一旦用就是出了大问题 ldr : load 读内存 ldr r0, [r1] : r1里存放的是地址值, 去这个地址读取4字节的内容,存入r0 s ...
- 2014-5-23 s3c2440到手
( 之前的开发板是s5pv210 (contex A8)); 现在入手JZ2440......................
- Java笔记(十三)……面向对象III继承(inheritance)
继承概述 继承概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可. 多个类可以称为子类,单独这个类称为父类或者超类. 子类可以直接访 ...
- ZOJ-2365 Strong Defence 贪心,BFS
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2365 我没看懂题目...这样理解:一个有向图,要给一些边染色,使 ...
- 利用stdin stdout stderr及POSIX-linux机制重定向写日志
由open返回的文件描述符一定是该进程尚未使用的最小描述符.由于程序启动时自动打开文件描述符0.1.2,因此第一次调用open打开文件通常会返回描述符3,再调用open就会返回4.可以利用这一点在标准 ...
- iOS开发:UIImageView常用操作
UIImageView,顾名思义,是用来放置图片的.使用Interface Builder设计界面时,当然可以直接将控件拖进去并设置相关属性,这就不说了,这里讲的是用代码. 1.创建一个UIImage ...
- xcode6 自定义UITabbarController
-(void)initTabBarView{ if (tabBarController && [kAPPDELEGATE.navigationController.viewContro ...
- Shell 命令--文件创建、搜索命令--总结自《Linux Shell 脚本攻略》
(一)文件创建命令 1.touch命令 比如:touch abc命令在本地文件夹中创建了一个名为abc的空文件 2.cp命令 cp命令同意我们把一个文件的内容拷贝到同名或不同名的文件里,复制得到的文件 ...
- 深入浅出JMS(一)——JMS简单介绍
假设手机仅仅能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了.为什么不能先将信息存下来,当用户须要查看信息的时候再去获得信息呢?伴 ...
- ubuntu12.04的vim配置
ubuntu12.04中使用的vim的版本不支持像语法高亮和文件类型检测等配置 #sudo apt-get install vim vim默认的配置使用起来还不能让人满意,还需要自己配置默认配置文件是 ...