nodejs爬虫循环获取数据
想实现一个端口扫描的功能,比如 192.168.1.666:80
-192.168.1.666:10000
使用的是 nodejs + express + cheerio
个人思路:循环端口,使用superagent
抓取80-10000之间ip的端口,如果该端口没有则跳出本次循环,然后执行下次,声明data
变量,如果端口内有内容且抓网站title,push
到data
中,
最后当执行到最大接口时,res.send(data)
遇到的问题:一直在转圈圈,把循环调小也一样,不知道什么问题,需要异步还是代码有问题?
代码:
const express = require('express');
var cheerio = require('cheerio');
const superagent = require('superagent');
const app = express();
//爬取地址
var url = 'http://47.74.xxx.xxx';
var maxport = 8085;
var data = [];
for(let port = 8082; port < maxport ; port++){
app.get('/', function (req, res, next) {
superagent.get( url + ':' + port )
.end(function (err, sres) {
if (err) {
return next(err);
}
const $ = cheerio.load(sres.text);
let items = $('title').text();
data.push(items)
if(port >= maxport){
res.send(data);
}
})
});
}
app.listen(3000, function () {
console.log('app is listening at port 3000');
});
最好能提供代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的问题可以归结为在nodejs中,for循环里面如何异步处理