基於nodejs的網路圖片爬蟲
阿新 • • 發佈:2019-01-06
這是我研究nodejs爬蟲後寫的一個圖片爬蟲小例子。不過功能還是挺強大的可以將你喜歡的圖片下載下來。
主要的爬蟲程式碼:
//var http = require('https');
var http = require('http');
var fs = require('fs');
var cheerio = require('cheerio');
var request = require('request');
//設定迴圈
var i = 0;
//初始url
var url = "http://m.juyouqu.com/qu/3187982";
function startSpider(x) {
console.log('向目標站點發送請求');
//採用http模組向伺服器發起一次get請求
http.get(x, function (res) {
var html = ''; //用來儲存請求網頁的整個html內容
var titles = [];
res.setEncoding('utf-8'); //防止中文亂碼
//監聽data事件,每次取一塊資料
res.on('data', function (chunk) {
html += chunk;
//console.log(chunk)
});
//監聽end事件,如果整個網頁內容的html都獲取完畢,就執行回撥函式
res.on('end', function () {
var $ = cheerio.load(html); //採用cheerio模組解析html
//console.log('html',html)
var news_item = {
//獲取文章的標題
title: $('.item-title').text().trim(),
imgSrc: $('.post-container img' ).attr('src'),
link: $(".button").attr('href'),//
//i是用來判斷獲取了多少篇文章
i: i = i + 1,
};
console.log(news_item);
var news_title = $('.item-title').text().trim();
savedImg($,news_title); //儲存每篇文章的圖片及圖片標題
//下一篇文章的url
var nextLink="http://m.juyouqu.com" + $(".button").attr('href');
//這是亮點之一,通過控制I,可以控制爬取多少篇文章.
if (i <= 10) {
setTimeout(function(){
startSpider(nextLink);
},300)
}
});
}).on('error', function (err) {
console.log(err);
});
}
//該函式的作用:在本地儲存所爬取到的圖片資源
function savedImg($,news_title) {
$('.post-container img').each(function (index, item) {
var img_title = news_title+index;
var img_filename = img_title + '.jpg';
var img_src = $(this).attr('src'); //獲取圖片的url
//採用request模組,向伺服器發起一次請求,獲取圖片資源
request.head(img_src,function(err,res,body){
if(err){
console.log(err);
}
});
request(img_src).pipe(fs.createWriteStream('./image/'+news_title + '---' + img_filename)); //通過流的方式,把圖片寫到本地/image目錄下,並用新聞的標題和圖片的標題作為圖片的名稱。
})
}
startSpider(url); //主程式開始執行
執行的截圖:
獲得的圖片:
如果看不懂,或者配置不了的話,可以下載我的資源包,整個專案的完整程式碼我都放上去了。
這是資源地址
(解壓後,如果node_modules裡面你檔案路徑與你電腦的路徑不符,你可以刪除了node_modules這個檔案然後在執行一下npm install就可以了)