node.js在爬取图片后存储到数据库出现问题
发布于 9 年前 作者 LNoe-lzy 3719 次浏览 最后一次编辑是 8 年前 来自 问答

在用node爬图片的时候,抓取到了24张图片,可是存到数据库时只有6条数据,不知道是什么情况 以下是我的代码

var mongodb = require(’./db’); var request = require(‘request’); var cheerio = require(‘cheerio’); var fs = require(‘fs’);

function Proxy(imgSourceUrl, imgTag){ this.sourceUrl = imgSourceUrl; this.sourceTag = imgTag; }

module.exports = Proxy;

//小爬虫 Proxy.prototype.startproxy = function(callback){ var data = { url: this.sourceUrl, tag: this.sourceTag } ; request(data.url, function(err, res){ if (err) { return callback(err); } var $ = cheerio.load(res.body.toString()); var j = $(’.j’); var a = j.find(’.a’); var arr = a.find(‘img’).toArray(); for (var i = 0;i<arr.length;i++){ var that = $(arr[i]); var item = { info: that.attr(‘alt’), url: that.attr(‘src’), name: that.attr(‘data-rootid’) }; console.log(item); var imgLinkPath = ‘/avatar/’ + item.name + ‘.jpg’; var img = { imagePath: imgLinkPath, imageName: item.name, name: ‘admin’, info: item.info, tag: data.tag }; downloadImg(item.url, item.name); saveImg(img, callback); } }); };

//下载图片 function downloadImg(url ,name){ request.head(url, function(err, res){ if (err) { return callback(err); } var imgStorePath = ‘public/avatar/’ + name + ‘.jpg’; fs.exists(imgStorePath, function(exits){ if (exits) { console.log(name + ‘已存在!’); } else { request(url).pipe(fs.createWriteStream(imgStorePath)).on(‘close’, function(){ console.log(name + ’ done’); }); } }); }); }

function saveImg(img,callback){ mongodb.open(function(err, db){ if (err){ return callback(err); } db.collection(‘images’,function(err, collections){ if (err) { mongodb.close(); return callback(err); } collections.update(img, img ,{ upsert: true },function(err){ mongodb.close(); if (err){ return callback; } callback(null); }); }); });

}

我在循环里头打印数据也是24条,可是数据库里头只有6条啊???这是为什么??

回到顶部