使用 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張圖片呢?

相關文章
相關標籤/搜索