首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用puppeteer集群的无限循环(有意)

使用puppeteer集群的无限循环(有意)
EN

Stack Overflow用户
提问于 2021-01-18 23:27:43
回答 1查看 237关注 0票数 0

我对puppeteer-cluster非常陌生。我的目标是无限地抓取100个站点的列表,这样一旦我到达第100个链接,脚本就会重新开始(理想情况下是重用相同的集群实例)。有没有更好的方法,或者说合适的方法来做这件事?我在想,故意只有一个无限循环(和旋转元素)可能会更容易。任何建议都将不胜感激。

下面是我的代码:

代码语言:javascript
复制
(async () => {
    const cluster = await Cluster.launch({
        concurrency: Cluster.CONCURRENCY_CONTEXT,
        maxConcurrency: 20,
        monitor: true
    });

    // Extracts document.title of the crawled pages
    await cluster.task(async ({ page, data: url }) => {
        await page.goto(url, { waitUntil: 'domcontentloaded' });
        const pageTitle = await page.evaluate(() => document.title);
        console.log(pageTitle);
    });

    // In case of problems, log them
    cluster.on('taskerror', (err, data) => {
        console.log(`  Error crawling ${data}: ${err.message}`);
    });

    while (true) {
        await new Promise(resolve => setTimeout(crawl, 5000));
    }

    async function crawl() {
        for (let i = 0; i < sites.length; i++) {
            const site = sites[i];

            site["product_urls"].forEach(async (url) => {
                await cluster.execute(url);
            });
        }

        await cluster.idle();
    }
})();
EN

回答 1

Stack Overflow用户

发布于 2021-01-18 23:32:23

代码语言:javascript
复制
for (;;) {}

将会给你一个无限循环,而不会遇到任何来自ESLint之类的问题,也不会出现“无法访问的代码”的警告。

也就是说,设置一个回退条件可能没有什么坏处,以便在需要时代码能够安全地结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65777430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档