从网站抓取到内容后,存入数据库。一直提示有问题,一开始以为是字段问题,我就写死了存入MYSQL的数据。成功运行了,但一看数据库:文章列表没问题(21条),但文章正文存入了1212条记录……为什么会这样?
数据库设计:
news_list表:
| newsId | int(255) | 文章分类的ID,主键
| title | varchar(255) | 文章主题
| time | varchar(20) | 文章发布时间
| curl | varchar(255) | 文章链接
| created_time | varchar(20) | 文章时间戳
news_detail表:
| newsId | int(255) | 文章分类的ID,主键
| content | varchar(255) | 文章内容
all.js
var newsList;
var newsDetail = {};
async.series([
// 获取新闻列表
function(done) {
read.newsList(config.sinaN.url, function(err, list) {
newsList = list;
done(err);
});
},
// 保存新闻列表1
function(done) {
save.newsList(newsList, done);
},
//保存新闻正文
function (done) {
async.eachSeries(newsList, function (n, next) {
save.newsDetail(n.url, function (err, list) {
newsDetail = list;
next(err);
});
}, done);
},
], function(err) {
if (err) console.error(err.stack);
console.log('完成');
process.exit(0);
});
read.js没问题
save.js
exports.newsList = function(list, callback) {
debug('保存新闻列表到数据库中: %d', list.length);
async.eachSeries(list, function(item, next) {
// 将发布时间转成字符串
var ttime = item.time;
ttime = ttime.replace(/[^0-9:]/mg, '-').replace(/\-\-/mg, ' ');
var created_time = new Date(ttime).getTime() / 1000;
// 查询新闻是否已存在
db.query('SELECT * FROM `news_list`WHERE `created_time`=? LIMIT 1', [created_time],
function(err, data) {
if (err) return next(err);
if (Array.isArray(data) && data.length >= 1) {
// 新闻已存在,转到下一条
db.query('UPDATE `news_list` SET `title`=?, `url`=?, `time`=? WHERE `created_time`=?', [item.title, item.url, item.time, created_time], next);
} else {
// 新闻不存在,添加
db.query('INSERT INTO `news_list`(`title`, `url`, `time`, `created_time`) VALUES (?, ?, ?, ?)', [item.title, item.url, item.time, created_time], next);
}
});
}, callback);
};
/**
* 保存新闻内容
*/
var test
exports.newsDetail = function(list, callback) {
debug('保存文章到数据库中: %d', list.length);
async.eachSeries(list, function(item, next) {
// 查询文章是否已存在
db.query('SELECT * FROM `news_detail` ',
function(err, data) {
if (err) return next(err);
test='1111111111111';
db.query('INSERT INTO `news_detail`(`content`) VALUES (?)', [test], next);
});
}, callback);
};
求问是哪里出了问题?我怀疑是all.js中保存正文那里出错了,但不知如何修正。
非常感谢!
我知道了……是在save.js的保存正文中,多加了async.eachSeries(list, function(item, next),导致重复录入,去掉这一条,再把next改为callback就好了