node可以做爬虫吗?

node可以做爬虫,下面我们来看一下如何使用node来做一个简单的爬虫。

node做爬虫的优势:

第一个就是他的驱动语言是JavaScript。JavaScript在nodejs诞生之前是运行在浏览器上的脚本语言,其优势就是对网页上的dom元素进行操作,在网页操作上这是别的语言无法比拟的。

第二就是nodejs是单线程异步的,一个页面未返回不会阻塞其它页面加载。

node做爬虫的劣势:

首先是异步并发上。处理的好很方便,处理的不好就会很麻烦。例如要爬取10个页面,用node不做异步处理话,那返回的结果可不一定是按1、2、3、4……这个顺序,很可能是随机。解决的办法就是增加一个页面的序列戳,让爬取的数据生成csv文件,然后重新排序。

第二个是数据处理上的劣势,这点是不如python的,如果只是单纯的爬数据,用node当然很好,但是如果用爬来的数据继续做统计分析,做个回归分析聚类啥的话,那就不能用node一步到底了。

下面就要说一下如何用nodejs做爬虫了

1、初始化项目文件

在对应的项目文件夹下执行npm init来初始化一个package.json文件

2、安装request和cheerio依赖包

request听起来很熟悉吧,跟python里request功能一样。它的功能就是建立起对目标网页的链接,并返回相应的数据,这个不难理解。

cheerio的功能是用来操作dom元素的,他可以把request返回来的数据转换成可供dom操作的数据,更重要的cheerio的api跟jquery一样,用$来选取对应的dom结点,是不很方便?对一个前端程序员来说,这比python的什么xpath和beautisoup方便了不知道多少啊哈哈

安装命令也很简单,分别是npm install request --save和npm install cheerio

3、引入依赖包并使用

接下来就用request和cherrio写一个爬虫吧!

首先引入依赖

var request = require("request");
var cheerio = require("cheerio");

接下来就以爬取我们学校的新闻页为例吧,我们学校的新闻页面链接是http://news.shu.edu.cn/Default.aspx?tabid=446

然后调用request的接口

request('http://news.shu.edu.cn/Default.aspx?tabid=446',function(err,result){
    if(err){
        console.log(err);
    }
    console.log(result.body);
})

将request返回的结果传入cheerio中,并获得想要获取的信息

request('http://news.shu.edu.cn/Default.aspx?tabid=446',function(err,result){
    if(err){
        console.log(err);
    }
    var $ = cheerio.load(result.body);
   $('a[id^="dnn"]').each(function(index,element){
       console.log($(element).text());
   })
})

4、设置请求头

具体事例代码如下:

var options = {
    url: startUrl+'?page=1',
    method: 'GET',
    charset: "utf-8",
    headers: {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)
         AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36",
        "cookie": cookies
    }
};
request(options,function(err,response,body){
//...
})

5、并发控制

爬取一个页面还好,要是页面多了就是无限制并发了,那肯定就要被封了,所以就要有一个并发控制,这里要介绍的就是async。跟上述一样要通过npm install async --save来安装并通过var async = require("async")来引入。

具体以一个限制并发的方式来示例一下

async.mapLimit(5,function(url,callback)){
//...
fetch(url,callback)
})

以上就是node可以做爬虫吗?的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Node.js答疑