Javascript 循环异步刮取

Javascript 循环异步刮取,javascript,node.js,asynchronous,web-scraping,axios,Javascript,Node.js,Asynchronous,Web Scraping,Axios,我想从我存储在数组中的wikipedia链接制作我的个人刮板,但异步javascript有一些问题,我想我只是没有充分认识到整个异步概念 所以基本上,在每次迭代中,我都希望我的axios.get link成为数据数组中的下一个对象,并经历整个刮取过程,当它结束时,在数组中获取下一个链接并重复整个过程,直到它循环所有数组链接为止。 我知道如何以同步的方式进行,但这种异步的方式对我来说只是另一个世界 const cheerio=require('cheerio'); const axios=requ

我想从我存储在数组中的wikipedia链接制作我的个人刮板,但异步javascript有一些问题,我想我只是没有充分认识到整个异步概念

所以基本上,在每次迭代中,我都希望我的axios.get link成为数据数组中的下一个对象,并经历整个刮取过程,当它结束时,在数组中获取下一个链接并重复整个过程,直到它循环所有数组链接为止。 我知道如何以同步的方式进行,但这种异步的方式对我来说只是另一个世界

const cheerio=require('cheerio');
const axios=require('axios');
var fs=需要('fs');
常数数据=[“a”、“b”、“c”、“d”、“e”];
for(设i=0;i{
让$=cheerio.load(res.data);
$('div.class.xyz')。每个(元素=>{
让post=$(元素).text();
控制台日志(post);
让输入='{'+JSON.stringify(post)+'},'+'\n\n';
fs.appendFileSync('info.json',input);
//console.log('Saved!');
//控制台日志(索引);
})
})
}
试试这个:

const cheerio = require('cheerio');
const axios = require('axios');
const fs = require('fs');

(async () => {
    const data = ["a","b","c","d","e"];
    for(let i = 0; i < data.length; i++){
        let link = data[i];
        const res = await axios.get(link);
        let $ = cheerio.load(res.data);
        $('div.class.xyz').each(element => {
        let post = $(element).text();
        console.log(post);
        let input = '{' + JSON.stringify(post) + '},' + '\n\n';
        await fs.appendFile('info.json', input);
        // console.log('Saved!');
        // console.log(index);
        });
    }
})();
const cheerio=require('cheerio');
const axios=require('axios');
常数fs=要求('fs');
(异步()=>{
常数数据=[“a”、“b”、“c”、“d”、“e”];
for(设i=0;i{
让post=$(元素).text();
控制台日志(post);
让输入='{'+JSON.stringify(post)+'},'+'\n\n';
等待fs.appendFile('info.json',输入);
//console.log('Saved!');
//控制台日志(索引);
});
}
})();
试试这个:

const cheerio = require('cheerio');
const axios = require('axios');
const fs = require('fs');

(async () => {
    const data = ["a","b","c","d","e"];
    for(let i = 0; i < data.length; i++){
        let link = data[i];
        const res = await axios.get(link);
        let $ = cheerio.load(res.data);
        $('div.class.xyz').each(element => {
        let post = $(element).text();
        console.log(post);
        let input = '{' + JSON.stringify(post) + '},' + '\n\n';
        await fs.appendFile('info.json', input);
        // console.log('Saved!');
        // console.log(index);
        });
    }
})();
const cheerio=require('cheerio');
const axios=require('axios');
常数fs=要求('fs');
(异步()=>{
常数数据=[“a”、“b”、“c”、“d”、“e”];
for(设i=0;i{
让post=$(元素).text();
控制台日志(post);
让输入='{'+JSON.stringify(post)+'},'+'\n\n';
等待fs.appendFile('info.json',输入);
//console.log('Saved!');
//控制台日志(索引);
});
}
})();

不,它不起作用。在等待fs.appendFile()时,它显示了一个“SyntaxError:await仅在异步函数中有效”错误。@Javashift他的代码是有效的。它在一个异步函数中。我想是的,但它仍然不起作用。这很有趣德诺普,它坏了。在等待fs.appendFile()时,它显示了一个“SyntaxError:await仅在异步函数中有效”错误。@Javashift他的代码是有效的。它在一个异步函数中。我想是的,但它仍然不起作用。这很有趣D