【问题标题】:Parallel scraping with puppeteer与 puppeteer 并行抓取
【发布时间】:2018-08-17 15:55:22
【问题描述】:

目前我有一些从 mongodb 获取数组的代码。刮板正在遍历数组,并从网站上刮取数组中的每个值。我的问题是它目前真的很慢。我如何能够并行化它以便同时抓取更多数据?

编辑:这是我要并行化的函数示例:

async function scrape(browser, page, i) {
//Start new Browser session
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
await page.goto(dealer);

//Site specific code 
await page.type('.Search-bar-text-input', arrayOfArticles[i]);
await page.click('.Embedded-search-button')
await page.waitFor('.BuyingOptions-total', {timeout: 2000});


price = await page.evaluate(() => {
    price = document.querySelector('.BuyingOptions-total').innerText;
    console.log(price);
    return price;
});

【问题讨论】:

    标签: node.js mongodb web-scraping parallel-processing puppeteer


    【解决方案1】:

    您始终可以使用child_processcluster 手动执行此操作。或者你可以使用node-pool,它更自动。

    来自issue

    const cluster = require("cluster");
    const numCPUs = require("os").cpus().length;
    const headless = true;
    
    let forks = numCPUs; // 4
    
    let browser;
    
    if (cluster.isMaster) {
        for (let i = 0; i < forks; i++) {
            cluster.fork();
            console.log('Fork #' + i);
        }
    } else {
        connectToChrome();
    }
    
    function connectToChrome()
    {
        (async function() {
            let headless = false;
            if (args.headless) {
                headless = true;
            }
            browser = await puppeteer.launch({headless: headless, args: ['--no-sandbox']});
        })();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多