nodejs爬虫循环获取数据

发布于 2022-09-07 23:19:04 字数 1290 浏览 23 评论 0

想实现一个端口扫描的功能,比如 192.168.1.666:80 -192.168.1.666:10000

使用的是 nodejs + express + cheerio

个人思路:循环端口,使用superagent抓取80-10000之间ip的端口,如果该端口没有则跳出本次循环,然后执行下次,声明data变量,如果端口内有内容且抓网站title,pushdata中,
最后当执行到最大接口时,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

氛圍 2022-09-14 23:19:04
const EventProxy = require('eventproxy');
const ep = new EventProxy();
let maxPort = 10000;
let portList = [];
let data = [];
const url = xxx.xxx.xxx.xx;
for(let port = 8082; port < maxPort; port ++) {
    portList.push(port);
}

portList.forEach((port) => {
    superagent.get( url + ':' + port )
    .end(function (err, sres) {
        if (err) {
            return ;
        }
        ep.emit('port', sres); //注册事件
    });
    
})

ep.after('port', maxPort - port, function(ports) {
    data = ports.map((item) => {
        const $ = cheerio.load(item.text);
        let title = $('title').text();
        return title;
    });
    console.log(data);
})

app.get('/', function(req,res, next) {
    res.send(...)
});

你的问题可以归结为在nodejs中,for循环里面如何异步处理

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文