今天学习@alsotang写的爬虫教程.
在挑战目标里面,是将文章的author也输出。
但是最后输出结果的时候,只有部分的author能输出
var express=require("express");
var app=express();
var superagent=require("superagent");
var cheerio=require("cheerio");
app.get("/",function(req,res,next){
superagent.get("https://cnodejs.org/")
.end(function(err,sres){
//常规的错误请求
if(err){
console.log(err.message);
return res.redirect("/");
}
var $=cheerio.load(sres.text);
var item=[];
$("#topic_list .topic_title").each(function(idx,element){
var $element=$(element);
var href=$element.attr("href");
item.push({
title:$element.attr("title"),
href:$element.attr("href")
});
superagent.get("https://cnodejs.org"+href).end(function(err,ssres){
var $$=cheerio.load(ssres.text);
item[idx].author=$$("div.changes").find("span:nth-child(2) a").text();
console.log(item[idx]);
})
})
res.send(item);
})
});
app.listen(8080,function(){
console.log("app is listening on the port of 8080");
})
7 回复
我上次写的爬segmentfault的所有tag描述开始就是那么循环,频率太高,你把状态码打出来看看,是不是502,是的话就用async.mapLimit限制下并发 https://github.com/luoyjx/tag-spider 代码不咋地,别拍我