使用 node 抓取网页图片

使用 node 抓取网页图片

node 的使用很是普遍,能够作通讯,作爬虫,甚至能够作桌面应用程序。node

今天就利用闲暇时间写个小小的分享:利用 node 爬取百度图片首页的图片。shell

对,就是中间那几张:npm

图片描述

首先新建一个文件夹,名字随便取,只要不是中文就行,而后在命令行中初始化一下:数组

npm init -y

新建一个名为 app.js 的文件app

在这个文件里,咱们须要引入一些模块:dom

var http=require('http');
var https=require('https')
var fs=require('fs');
var cheerio=require('cheerio');

cheerio 模块是第三方模块,须要进行安装:ui

npm install cheerio --save

接下来,须要解析百度图片的首页:url

var wz='http://images.baidu.com/';
var strHtml='';
http.get(wz,(res)=>{
    res.on('data',(chunk)=>{
        strHtml+=chunk;
    });
    console.log(strHtml)
})

在命令行输入 node app.js 运行,会在命令行看到网页的源代码。这样网页就解析完了。spa

接下来咱们须要获取首页中间的十张图片。命令行

要获取图片,就必须知道图片的 url 地址,在这个网页上,图片的url地址在 img_single_box 下的 img 标签里。

咱们以前引用了一个名为 cheerio 的第三方模块,这个库是一个 jQuery 的模块,能够在服务端写 jQuery

在上面的代码示例中,咱们已经获取到了网页源代码,接下来就要找到咱们须要的 url 地址了:

http.get(wz,(res)=>{
    res.on('data',(chunk)=>{
        ···
    });
    res.on('end',()=>{
        var $=cheerio.load(strHtml);

        //创建一个空数组,用来放咱们取得的url地址
        var imgdata=[];
        $('.img_single_box img').each((index,item)=>{
            imgdata.push($(item).attr('src'))
        });
        console.log(imgdata)
    })
})

运行咱们写的文件,你将会看到咱们须要的url地址已经存进去了。

如今就利用这几个url地址来保存图片了

http.get(wz,(res)=>{
    res.on('data',(chunk)=>{
        ···
    });
    res.on('end',()=>{
        ···
        function saveImage(imgdata){
            https.get(imgdata,(res)=>{
                res.setEncoding('binary');//二进制文件
                var data='';
                res.on('data',(a)=>{
                    data+=a;
                }).on('end',()=>{
                    if(!fs.existsSync('./images')){
                        fs.mkdirSync('./images');
                    };
                    fs.writeFile('images/'+Math.random()+'.png',data,'binary',(err)=>{
                        if(!err)
                        console.log('成功')
                    })
                })
            });
        }
        for(var i=0;i<imgdata.length;i++){
            saveImage(imgdata[i]);
        }
    })
})

到这里就写完了,在命令行 node app.js ,是否是在 images 文件夹下有了10张图片呢?

相关文章
相关标签/搜索