标签归档:nodejs

爬虫的两种处理方法

爬虫:按照百度百科的定义为,网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。

爬虫就是一个程序,它可以自己去抓取网络上的网页。当然爬虫是个复杂的过程,否则就不可能,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();
    });