循环异步抓取

时间:2020-12-19 22:00:39

标签: javascript node.js asynchronous web-scraping axios

我想从存储在数组中的维基百科链接制作我的个人抓取工具,但是异步 javascript 有一些问题,我想我只是没有足够了解整个异步概念。

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

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

const data = ["a","b","c","d","e"];

for(let i = 0; i < data.length; i++){

let link = data[i];

axios.get(link).then((res) => {

  let $ = cheerio.load(res.data);

    $('div.class.xyz').each(element => {
    let post = $(element).text();
    console.log(post);
    let input = '{' + JSON.stringify(post) + '},' + '\n\n';

    fs.appendFileSync('info.json', input);
    // console.log('Saved!');
    // console.log(index);
  })
  })
}

1 个答案:

答案 0 :(得分:0)

试试这个:

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);
        });
    }
})();