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