我对puppeteer-cluster非常陌生。我的目标是无限地抓取100个站点的列表,这样一旦我到达第100个链接,脚本就会重新开始(理想情况下是重用相同的集群实例)。有没有更好的方法,或者说合适的方法来做这件事?我在想,故意只有一个无限循环(和旋转元素)可能会更容易。任何建议都将不胜感激。
下面是我的代码:
(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();
}
})();发布于 2021-01-18 23:32:23
for (;;) {}将会给你一个无限循环,而不会遇到任何来自ESLint之类的问题,也不会出现“无法访问的代码”的警告。
也就是说,设置一个回退条件可能没有什么坏处,以便在需要时代码能够安全地结束。
https://stackoverflow.com/questions/65777430
复制相似问题