爬虫:按照百度百科的定义为,网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。
爬虫就是一个程序,它可以自己去抓取网络上的网页。当然爬虫是个复杂的过程,否则就不可能,google,百度会成为顶级的互联网公司,可以说,如果你掌握了爬虫,你就掌握了大数据,从而你就可以做很多意想不到的事情。
还记得以前的时候,google刚开始兴起的时候,它是疯狂的抓取,对内容也没有过多的处理,那时候,只要你会使用google,你就可以解决基本上95%以上的问题,因为问题的答案,基本都可以通过google搜索到答案。
下面对爬虫的处理方法来进行简要阐述
现在的页面有两种情况,一种是网页的内容在页面源代码里面,一种是在js中,通过js操作dom,显示内容。对于第一种,很方便,我们只要抓取到网页的源代码就行,比如php中file_get_contents('http://www.csdn.net') 就可以获取到csdn首页的内容。
对于第二种,他们一般是通过ajax加载获取到的,这种如果ajax有规律的话还好说,我们可以直接再使用第一种的方法,对ajax的url进行内容获取,通过json或者其他的字符串处理函数来进行解析,得到内容。
但是如果url,不规律,甚至是通过js复杂运算得到的话,我们就要采取新的策略了,其实说白了,我们的策略就是,既然浏览器能够获取到最终的内容,那么我们能不能自己封装个浏览器引擎呢,答案是可以的。而且这已经有人替我们做好了,phantomjs就是这样一个WebKit 的服务器端 JavaScript API,它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。 PhantomJS 可以用于 页面自动化 , 网络监测 , 网页截屏 ,以及 无界面测试 等。
而且很多语言都和这个语言进行了整合
在这里我只要说一下nodejs 和phantomjs的结合
在nodejs中通过npm安装phantom后,就可以加载一些通过js产生的页面了,其中我们通过一个延迟来等待js将最终的页面渲染出来。
操作的代码如下:
var phantom = require('phantom'); var sitepage = null; var phInstance = null; var waitFor = function(){ console.log(22); } phantom.create() .then(instance => { phInstance = instance; return instance.createPage(); }) .then(page => { sitepage = page; return page.open('http://h5.m.taobao.com/movie/movie-data/audience.html?showid=28591'); }) .then(status => { console.log(status); setTimeout(waitFor,5000); return sitepage.property('content'); phantom.exit(); }) .then(content => { console.log(content); sitepage.close(); phInstance.exit(); }) .catch(error => { console.log(error); phInstance.exit(); });