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,我们确保了每个页面在加载下一个页面之前完全加载完毕。
这种方式可以有效控制并发量,避免一次性打开过多页面导致的资源消耗过大问题。

