nodejs的网络爬取

我们有的时候需要一些数据,但是自己去造又比较的麻烦,于是就有了一种解决方案,使用工具去抓取到自己想要的内容。这是一款基于nodejs的抓包工具(Crawler),使用方式还算比较简单,直接看代码吧。
官网任意门:https://www.npmjs.com/package/crawler

  1. 安装:npm i crawler
var Crawler = require("crawler");
 
var c = new Crawler({
    maxConnections : 10,
    // This will be called for each crawled page
    callback : function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            var $ = res.$;
            console.log($("title").text());
        }
        done();
    }
});
 
// Queue just one URL, with default callback
c.queue('https://www.taobao.com/');

在这里插入图片描述
这段代码是官网的一个案例,直接将淘宝网的标题获取下来了,如果需要抓取自己需要的内容,那么就要自定义抓取规则了。

案例一:将抓取的内容存入到本地

// 1.引入文件
let fs = require('fs')
let path = require('path')
let Crawler = require("crawler");

// 2.定义文件路径
let fileName = path.join(__dirname,'upload',`file-${new Date().toLocaleDateString()}.txt`)
let data = ''

// 3.创建Crawler对象
let c = new Crawler({
    maxConnections : 10,
    callback : function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            // 4.定义抓取规则
            let $ = res.$;
            data += $("title").text()
            console.log($("title").text());
            // 5.将抓取到的内容写入文件中
            fs.writeFile(fileName,data,err=>{
                if(!err){
                    console.log('写入成功')
                }else{
                    console.log(err)
                }
            })
        }
        done();
    }
});
 
// Queue just one URL, with default callback
c.queue('https://www.taobao.com/');

在这里插入图片描述
注意:一些比较大型的网站都有可能有做一些反爬取的措施,获取到内容跟实际的内容不一致,或者获取不到想要的内容。
读写一般都是异步代码,如果爬取程序还没有爬取完成,就导致已经将空的内容写进了文件内,那么就没有任何意义了,这个时候我们一般是可以直接将代码写在数据爬取成功的后面,如上文中那么书写,但是如果异步代码很多之后,就会让页面看起来非常的不美观。事实上,官网也提供了对应的解决方案:

crawler.on('drain',function(options){ });

官网提供了三个不同的值:schedule、request、drain,我们可以在不同的时机来做对应的处理,一般在drain中来操作最后的写入或者SQL的写入也是可以在这里操作的,有兴趣的各位可以试试。

// 5.将抓取到的内容写入文件中
c.on('drain',function(options){
    fs.writeFile(fileName,data,err=>{
        if(!err){
            console.log('写入成功')
        }else{
            console.log(err)
        }
    })
});

最后,官网中还有其他很有意思的操作,比如同时抓取多个地址的数据等,更多的本人也还在探索,希望能够共同学习共同进步吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值