系列教程:html
手把手教你写电商爬虫-第一课 找个软柿子捏捏python
手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫程序员
手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取ajax
手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染json
四节课过去了,我们在爬虫界也都算见过世面的人,如今再来一些什么ajax加载之类的小鱼小虾应该不在话下了,即便是淘宝这种大量的ajax,咱们祭上咱们的核武器,也轻松应对了,这一课主要是来看看除了技术上的页面处理外,咱们还会赶上更棘手的问题,就是反爬虫,固然如今有各类各样的反爬虫,今天就先介绍最简单的一种:限制IP。浏览器
今天我们的对手依然是业界大佬,马云最忌惮的男人,宅男心中爱恨交错的对象 - JD.COM框架
也不用我安利,特别是程序员,有几个没给京东送过钱的。废话很少说,先上工具:dom
一、神箭手云爬虫,二、Chrome浏览器 三、Chrome的插件XpathHelper 不知道是干吗的同窗请移步第一课分布式
打开网站瞅一眼:工具
好了,相信我,截这张图绝对不是在虐大家这些单身狗。咱们就是科学的研究一下这个页面,没啥特别的:大厂风,硬仗准备。
先来挑一个分类吧,此次挑一个你们都熟悉的互联网书类:
http://search.jd.com/Search?keyword=Python&enc=utf-8&book=y&wq=Python&pvid=33xo9lni.p4a1qb
大家的最爱,python从入门到放弃的所有资料。
和前面几节课相似的分析这节课就不作了,对于分页,ajax请求什么的,你们能够直接参考前面的四节课,这一刻主要特别的是,咱们在采集商品的同时,会将京东的商品评价采集下来。同时呢,咱们也探讨下该如何应对京东对IP的限制,OK,先直接上代码:
var configs = { domains: ["search.jd.com","item.jd.com","club.jd.com"], scanUrls: ["http://search.jd.com/Search?keyword=Python&enc=utf-8&qrst=1&rt=1&stop=1&book=y&vt=2&page=1&s=1&click=0"], contentUrlRegexes: ["http://item\\.jd\\.com/\\d+.html"], helperUrlRegexes: ["http://search\\.jd\\.com/Search\\?keyword=Python&enc=utf-8&qrst=1&rt=1&stop=1&book=y&vt=2&page=\\d+&s=1&click=0"],//可留空 fields: [ { // 第一个抽取项 name: "title", selector: "//div[@id='name']/h1",//默认使用XPath required: true //是否不能为空 }, { // 第一个抽取项 name: "productid", selector: "//div[contains(@class,'fl')]/span[2]",//默认使用XPath required: true //是否不能为空 }, { name: "comments", sourceType: SourceType.AttachedUrl, attachedUrl: "http://club.jd.com/productpage/p-{productid}-s-0-t-3-p-0.html", selectorType: SelectorType.JsonPath, selector: "$.comments", repeated: true, children:[ { name: "com_content", selectorType: SelectorType.JsonPath, selector: "$.content" }, { name: "com_nickname", selectorType: SelectorType.JsonPath, selector: "$.nickname" }, ] } ] }; configs.onProcessHelperUrl = function(url, content, site){ if(!content.indexOf("抱歉,没有找到")){ var currentPage = parseInt(url.substring(url.indexOf("&page=") + 6)); if(currentPage == 0){ currentPage = 1; } var page = currentPage + 2; var nextUrl = url.replace("&page=" + currentPage, "&page=" + page); site.addUrl(nextUrl); } return true; }; var crawler = new Crawler(configs); crawler.start();
这里主要给你们讲一下这个评论的配置,因为评论是多项,且评论还有子项,在框架中,是经过children关键字来配置的。具体参照代码既可,咱们能够在子项中在定义不一样的字段,像这里的comments抽取项会有content和nickname两个子抽取项,分别对应的是评论的内容和昵称。
这里是一个简化的版本,因为京东页面相对很复杂,咱们在抽取评论的时候,只抽取前一部分评论,固然咱们还能够拿到更多的信息,包括评论数,评论人的等级等等,这里你们就自行探索吧。
最后,因为京东会对IP进行封锁,虽说神箭手会自动分布式开启爬虫,不过依然扛不住京东大叔的封锁,所以这里须要经过接入代理IP解决这样的问题,相似开启js渲染,爬取速度会大大降低,须要你们耐心等待结果喽,代码以下:
configs.enableProxy = true;
大功告成,开启爬虫,喝杯咖啡,京东商品的评论就能够看到啦:
评论由于是数字,所以会存储的时候,会直接存储成json格式:
对爬虫感兴趣的童鞋能够加qq群讨论:342953471。