Node.js 与NodeJS和Cheerio擦肩而过花费了太多的时间

Node.js 与NodeJS和Cheerio擦肩而过花费了太多的时间,node.js,web-scraping,cheerio,Node.js,Web Scraping,Cheerio,这是我第一次使用NodeJS,我想根据我在url中传递的参数刮取页面内容 const cheerio = require('cheerio'); const https = require('https'); const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('

这是我第一次使用NodeJS,我想根据我在url中传递的参数刮取页面内容

const cheerio  = require('cheerio');
const https = require('https');
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('Type station name ', (search) => {
    for (let i = 0; i <= 4000; i++) {
        (async (url) => {
            const content = await getScript(url);
            const $ = cheerio.load(content);
            let stationName = $('div[class=here] span[class=txtbold]').text();
            if(stationName.toUpperCase().includes(search.toUpperCase())) {
                console.log(stationName + ": " + i);
            }
            
        })('https://cg06.tsi.cityway.fr/qrcode/?id=' + i);
    }
    rl.close();
});

const getScript = (url) => {
    return new Promise((resolve, reject) => {
        https.get(url, (resp) => {
            let data = '';

            resp.on('data', (chunk) => {
                data += chunk;
            });

            resp.on('end', () => {
                resolve(data);
            });

        }).on("error", (err) => {
            reject(err);
        });
    });
};
    
const cheerio=require('cheerio');
常量https=require('https');
const readline=require('readline');
const rl=readline.createInterface({
输入:process.stdin,
输出:process.stdout
});
rl.问题('键入站点名称',(搜索)=>{
for(设i=0;i{
const content=wait getScript(url);
const$=cheerio.load(内容);
让stationName=$('div[class=here]span[class=txtbold]')。text();
if(stationName.toUpperCase().includes(search.toUpperCase())){
console.log(stationName+“:”+i);
}
})('https://cg06.tsi.cityway.fr/qrcode/?id="(i),;
}
rl.close();
});
const getScript=(url)=>{
返回新承诺((解决、拒绝)=>{
https.get(url,(resp)=>{
让数据=“”;
在('数据',(块)=>{
数据+=块;
});
分别在('结束',()=>{
解析(数据);
});
}).on(“错误”,(错误)=>{
拒绝(错误);
});
});
};
问题是我有4000次迭代,而这个脚本需要花费太多的时间来执行

我怎样才能解决这个问题


提前感谢

目前4000次迭代需要多长时间?你认为可以接受的时间是多少?您是否对
getScript()
中的时间和
cheerio.load()中的时间进行了计时?这将是首先要建立的。对于初学者,您可能会并行加载10-50个操作(取决于目标服务器的功能)
getScript()
,因为这些操作都是异步的。您不希望一次执行太多操作,因为这可能会使目标服务器无法承受,但您肯定可以一次执行多个操作。