相关教程:html
手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫chrome
手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取segmentfault
手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染浏览器
手把手教你写电商爬虫-第五课 京东商品评论爬虫 一块儿来对付反爬虫 框架
工具要求:教程中主要使用到了 一、神箭手云爬虫 框架 这个是爬虫的基础,二、Chrome浏览器和Chrome的插件XpathHelper 这个用来测试Xpath写的是否正确dom
基础知识: 本教程中主要用到了一些基础的js和xpath语法,若是对这两种语言不熟悉,能够提早先学习下,都很简单。函数
以前写了一个电商爬虫系列的文章,简单的给你们展现了一下爬虫从入门到进阶的路径,可是做为一个永远走在时代前沿的科技工做者,咱们历来都不能中止。工具
在已有的成果上,因此带上你的chrome,拿起你的xpathhelper,打开你的神箭手,让咱们再次踏上征战金融数据之旅吧。(上个系列相对难一些,建议若是是初学者,先看这个系列的教程)。学习
金融数据实在是价值大,维度多,来源广。咱们到底从哪里入手呢?想来想去,就从前一段时间风云变幻的p2p网贷开始吧。
一样,咱们教程的一致风格就是先找个软柿子,上来不能用力过猛,逐渐培养本身的信心,等真正敌人来的时候,才不至于怯场惧怕。
咱们先去搜索一下p2p网站,随便找几个对比一下,选中了这个沪商财富。
看着这样的收益率,心动了有木有,钱包坐不住了有木有,对余额宝投出鄙夷的目光了有木有。
好了,闲话不说,这个系列课程吸收上个系列课程里进度太快的教训,给你们多讲一些基础的知识,这一课就结合这个实例,重点讲讲xpath的编写和用法。
首先,大致来说,XPath是一个相对简单的语言,甚至都不必定能称得上是一个语言,主要用处是用来标记XML的元素路径。因为html也是一种xml,所以一般来讲,在html中抽取某个元素是经过XPath来作的。XPath自己和Css有着很大的类似性,通常来讲若是以前对Css有必定的了解的话,XPath上手仍是很简单的。具体的状况我在下面的课程中一边写,一边解释。
首先先肯定列表页:
http://www.hushangcaifu.com/invest/main.html http://www.hushangcaifu.com/invest/index2.html http://www.hushangcaifu.com/invest/index3.html
基本上能够看到列表页除了第一页之外都有规律可寻,不过看到这个效果,一般咱们最好精益求精一下,看下第一页是否也能够符合规律呢?
打开 http://www.hushangcaifu.com/invest/index1.html
果真也是第一页,好了,很完美,总结成正则表达式:
http://www\\.hushangcaifu\\.com/invest/index\\d+\\.html
再看下详情页:
http://www.hushangcaifu.com/invest/a3939.html http://www.hushangcaifu.com/invest/a3936.html
哈哈,小菜一碟,直接化解成正则:
http://www\\.hushangcaifu\\.com/invest/a\\d{4}\\.html
好了,最后最重要的就是提取页面元素了。咱们打开详情页:
http://www.hushangcaifu.com/invest/a3870.html
通常来讲,咱们在咱们想要提取的元素上右击,点击审查元素,获得以下结果:
首先看到yanh1147这个元素有没有整个网页惟一的class,id或者其余属性,能够看到,在这个页面中没有,那么咱们就往上找,上一级的p标签也没有,我们再往上找,在上一级是一个,终于有class了,让咱们祈祷这个class是惟一的吧,ctrl+f打开搜索框,输入product-content-top-left-top,能够看到,找到了1 of 1,这个表明一共一个,这个是第一个,这就是咱们但愿的结果,好了,只用找到这一级既可,咱们来构造整个的xpath,通常来讲xpath咱们并不会从最顶层的html开始写,由于没有必要,所以咱们要使用//,这个表示不知中间有多少的层级。接着咱们直接把刚刚找到的这个div写上去,获得这个表达式:
//div[contains(@class,"product-content-top-left-top")]
对于class属性,咱们一般会使用contains这样一个函数,防止一个元素有多个class的状况,另外由于class是一个属性,所以class前面须要加上@表明选择到该元素的一个属性。
如今咱们已经选择到了咱们要选择的元素的父元素的父元素,只要咱们继续往下走两层既可。
//div[contains(@class,"product-content-top-left-top")]/p/span
因为咱们要选择元素里的文字信息,而不是整个元素,咱们须要指定是这个元素的文字:
//div[contains(@class,"product-content-top-left-top")]/p/span/text()
好了,这样咱们就肯定了咱们爬取的借款用户的名称,咱们打开xpathhelper验证一下有没有写错:
完美的结果。不过你们有的时候也须要注意,由于有的网页不表明你在一个内容页测试成功,在其余内容页也能成功,最好多测几个页面才是保险的。好了,其余的抽取项就不一一演示了,直接上最后的代码。
var configs = { domains: ["www.hushangcaifu.com"], scanUrls: ["http://www.hushangcaifu.com/invest/index1.html"], contentUrlRegexes: ["http://www\\.hushangcaifu\\.com/invest/a\\d{4}\\.html"], helperUrlRegexes: ["http://www\\.hushangcaifu\\.com/invest/index\\d+\\.html"], fields: [ { name: "title", selector: "//div[contains(@class,'product-content-top-left-top')]/h3/text()", required: true }, { name: "user_name", selector: "//div[contains(@class,'product-content-top-left-top')]/p/span/text()" }, { name: "total_money", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[1]/h4/text()" }, { name: "project_time", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[2]/h4/text()" }, { name: "annual_return", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[3]/h4/text()" }, { name: "return_method", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[4]/h4/text()" } ] }; var crawler = new Crawler(configs); crawler.start();
将代码粘贴到神箭手平台上既可运行。好了,看下运行结果:
对爬虫感兴趣的童鞋能够加qq群讨论: 566855261。