gpt4 book ai didi

javascript - 使 Puppeteer 同时转到不同的链接

转载 作者:行者123 更新时间:2023-12-01 21:33:57 32 4
gpt4 key购买 nike

我需要让我的 api 更快地抓取 url 列表。现在,我一次一页地转到每一页,并将数据添加到一个数组中。我需要一次打开多个链接并将我从中获取的数据添加到同一个数组中。

这是我的代码:

var videos = [];
for(var i = 0; i < profile.videoLinks.length; i++){
await page.goto(profile.videoLinks[i].video, {
// waitUntil: 'load'
});
await page.waitForSelector('.music-info')
var vidInfo = await page.evaluate(() => {
const vidTitle = document.querySelector('.video-meta-title').innerText;
const musicInfo = document.querySelector('.music-info').innerText;
const musicLink = document.querySelector('.music-info a').href;
const likes = document.querySelector('.like-text').innerText;
const comments = document.querySelector('.comment-text').innerText;

return {
vidTitle,
musicInfo,
musicLink,
likes,
comments
}
})
videos.push(vidInfo);

现在,我的链接数组在 profile.videoLinks[ ].video 中。我应该将数组分成两半然后对每个数组使用评估函数吗?

最佳答案

您可以使用 puppeteer-cluster并行运行任务(我是该库的作者)。您可以指定要并行使用的页面(或浏览器)数量。然后库会负责处理您的任务。

代码示例

const { Cluster } = require('puppeteer-cluster');

const videos = [];

(async () => {
// Setup a cluster with 4 browsers in parallel
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_BROWSER,
maxConcurrency: 4,
});

// Define your task to be executed
await cluster.task(async ({ page, data: url }) => {
await page.goto(url);
await page.waitForSelector('.music-info');

var vidInfo = await page.evaluate(/* ... */);
videos.push(vidInfo);
});

// Queue your URLs
for(var i = 0; i < profile.videoLinks.length; i++){
cluster.queue(profile.videoLinks[i].video);
}

// Wait for the cluster to finish and close it
await cluster.idle();
await cluster.close();
})();

关于javascript - 使 Puppeteer 同时转到不同的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62240908/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com