Nodejs 用 js 做爬虫 并发获得了 10 个链接 然后用 chromeless 去加载 有什么办法可以一个一个的加载 而不要一下子打开 10 个页面

Nodejs 用 js 做爬虫 并发获得了 10 个链接 然后用 chromeless 去加载 有什么办法可以一个一个的加载 而不要一下子打开 10 个页面
null

5 回复

这个一般都是用 promise 去控制的,promise 文档翻一翻吧。


const urlList = []
for(let i = 0;i<urlList.length;i++){
await page.open(urlList[1]);
await page.close()
}

async/await promise
async.eachSeries

在 Node.js 中使用爬虫获取链接后,通过 chromeless 来逐个加载页面,你可以使用 JavaScript 的异步控制流来实现这一点。你可以利用 async/await 来确保页面按顺序加载,而不是同时打开所有页面。以下是一个简单的示例代码展示如何实现这一点:

const axios = require('axios');
const Chromeless = require('chromeless').default;

async function fetchLinks() {
  // 假设你已经有了10个链接的数组 links
  const links = await axios.get('YOUR_CRAWLER_ENDPOINT').then(res => res.data);
  return links;
}

async function loadLinksSequentially(links) {
  const chromeless = new Chromeless();

  try {
    for (const link of links) {
      await chromeless.goto(link);
      // 这里可以添加其他操作,如截图、提取文本等
      console.log(`Loaded: ${link}`);
      // 等待一段时间以避免过快请求(可选)
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  } finally {
    await chromeless.end();
  }
}

fetchLinks().then(links => loadLinksSequentially(links));

在这个例子中,fetchLinks 函数模拟了从爬虫获取链接的过程(你需要替换 YOUR_CRAWLER_ENDPOINT 为你的实际爬虫接口)。loadLinksSequentially 函数则按顺序加载每个链接。通过使用 await,我们确保了每个页面在加载下一个页面之前完全加载完毕。

这种方式可以有效控制并发量,避免一次性打开过多页面导致的资源消耗过大问题。

回到顶部