node实现网页内容的爬取

编写爬虫程序大多是后端开发者的工作,但是node的出现使得前端开发者编写爬虫程序变的可能,而且实习操作起来非常的简单。

首先介绍SuperAgent,SuperAgent是一个小型的渐进式客户端HTTP请求库,与Node.js模块具有相同的API,具有许多高级HTTP客户端功能。从这句官方解释就可以看出SuperAgent是在node环境下封装的实现http请求的库,实现网页内容的请求。

cheerio是在node环境下,能够使用像jquery api的方式获取网页dom中的数据。

这两个工具结合在一起可以抓取业务中特定的内容。我们都知道前端的网页开发中,经常将具有相同样式的dom节点用相同的class名来标记,这样可以使它们具有相同的样式,这样就可以让我们对抓取网页中特定的内容提供了方便。

我们以某网站的新闻也为例:

 

上面图中是新闻列表对应的代码,我们可以看到列表被id="xy-impcon"的div容器包裹,每个类别的新闻列表用ul,ul都有个共同class名list-a,ul下面都有li标签和a标签。如果想获取每个新闻条目我们用cheerio获取dom可以这样写$('#xy-impcon ul.list-a li a'),那么我们就来编写爬取链接和标题程序,并且将爬取的数据保存成文件。

var http = require("http"),
    url = require("url"),
    superagent = require("superagent"),
    cheerio = require("cheerio"),
    async = require("async"),
    eventproxy = require('eventproxy');
var path = require('path');
var $ = require('jQuery');
var fs = require("fs");
var writerStream2 = fs.createWriteStream(path.resolve(__dirname,'../data/news.txt'),{ flags: 'w',encoding: null,mode: 0666 });

var text = [];
(function (){
    superagent.get('爬取网站的url')
        .end(function(err,pres){
        var $ = cheerio.load(pres.text);
        var curPageUrls = $('#xy-impcon ul.list-a li a');
        console.log(curPageUrls.length)
        curPageUrls.each(function(index, elem){
            text.push({
                title: $(elem).text(),
                url: $(elem).attr('href')
            })
        })
        writerStream2.write(JSON.stringify(text),'UTF8');
  });
})();

  上面的代码就把爬取的内容都保存成了文件。

除此之外我们还可以使用phantomjs的webpage模块在node环境模拟浏览器端爬取网页数据,生成网页的截图。之后介绍具体用法

 

posted @ 2018-06-10 13:32  leejay-blog  阅读(1617)  评论(0编辑  收藏  举报