我正在尝试修复我的node.js抓取程序。
他是其中的一员:
var site = 'http://www.some.com/';
var startPath = '/hambaarst-1.aspx?ipp=35';
var pageNumArray = [2,3,4,5,6,7,8,9,10,11,12];
async.series([
function(callback) {
async.each(pageNumArray, function(page, callback) {
request(site+startPath, function(err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('div.Info').find("a").each(function(){
var url = $(this).attr('href');
doctorPageUrlArray.push(url);
});
} else {
console.log(resp.statusCode);
}
startPath = startPath.slice(0,11)+page+startPath.slice(-12); // HERE, I am changing start path.
callback();
});
}, callback);
},
我需要循环11次,每次更改startPath
变量:
startPath = startPath.slice(0,11)+page+startPath.slice(-12);
但相反,它只是首页抓取11次:'/hambaarst-1.aspx?ipp=35'
。
所以我猜因为节点'异步startPath
没有更新。
我该如何解决?
答案 0 :(得分:1)
var async = require('async');
var format = require('request');
var format = require('util').format;
var site = 'http://www.some.com';
var startPath = '/hambaarst-%s.aspx?ipp=35';
var pageNumArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var doctorPageUrlArray = [];
async.each(pageNumArray, function (page, next) {
console.log(format(site + startPath, page));
request(format(site + startPath, page), function (err, res, body) {
if (!err && resp.statusCode === 200) {
var $ = cheerio.load(body);
$('div.Info').find("a").each(function(){
doctorPageUrlArray.push($(this).attr('href'));
});
} else {
console.log(resp.statusCode);
}
next();
});
}, function (err) {
if (err) {
return console.log(err);
}
console.log(doctorPageUrlArray);
});