Open WriterLuo opened 8 years ago
写的比较丑陋,思路是观察 cnodejs 的 url 格式,发现是用 url 参数确定第几个分页,那么就可以用一个循环来获取需要的分页。
var baseUrl = 'https://cnodejs.org/?tab=all&page=';
var pageNum = 1;
var maxPageNum = 5;
var items = [];
async.whilst(
function () {
return pageNum <= maxPageNum;
},
function (callback) {
setTimeout(callback, 1000);
superagent.get(baseUrl + pageNum)
.end(function (err, sres) {
if (err) {
return next(err);
}
var $ = cheerio.load(sres.text);
$('#topic_list .topic_title').each(function (idx, element) {
var $element = $(element);
items.push({
title: $element.attr('title'),
href: $element.attr('href')
});
});
if (pageNum == maxPageNum){
console.log(items);
}
pageNum++;
});
},
function (err,n) {
}
)
例如案例cnodejs.org中,首页他是会出现分页的,默认课程请求的是第一页中的list,如果我要一并请求第2页面,第3页,甚至所有分页。然后都push进items数组里呢?尝试用多个superagent.get('....')貌似会报错。 还有一个问题,例如http://www.abc.com。我要请求他的目录是动态,例如http://www.abc.com/123 http://www.abc.com/456 http://www.abc.com/789中的内容生成json格式,有什么好的方法吗?谢谢