用node.js写的爬虫爬cnode社区的作者的时候为什么只能爬一部分?
今天学习@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 代码不咋地,别拍我
@luoyjx 我记起来了,昨天晚上我就不停的在爬cnode。。今天早上突然上不去cnodejs社区。返回的502,我估计是把我Ip封了的原因0 0
@CommanderXL 是的,你要控制一下爬虫的并发数
@CommanderXL 是nginx做了限制 自豪地采用 CNodeJS ionic
爬虫,各种流泪啊, 记得以前爬文库,被封了ip,又被封了账号。。。。。
@gwesley 对啊,如果不控制并发量的话,不停的爬就封IP了