JavaScript爬虫速度控制的关键在于合理运用setTimeout函数或Promise.then()方法,避免对目标服务器造成过大压力。 setTimeout允许您在指定毫秒数后执行函数,从而实现延迟。
以下示例展示了如何使用setTimeout控制爬虫速度:
const axios = require('axios'); const cheerio = require('cheerio'); // 爬取函数 async function scrape(url) { try { const response = await axios.get(url); const html = response.data; const $ = cheerio.load(html); // 提取所需数据 const data = $('selector').text(); // 替换'selector'为你的选择器 console.log(data); return data; } catch (error) { console.error(`Error fetching ${url}:`, error); return null; } } // 主程序 async function main() { const urls = [ 'https://example.com/page1', 'https://example.com/page2', 'https://example.com/page3', // ...更多URL ]; for (let i = 0; i < urls.length; i++) { const url = urls[i]; const data = await scrape(url); if(data) { // 处理提取的数据 } await new Promise(resolve => setTimeout(resolve, 1000)); // 延迟1秒 } } main();
此代码使用axios获取网页内容,cheerio解析HTML。 setTimeout在每次爬取后引入1秒延迟(可根据需要调整)。 为了更好的错误处理,增加了对scrape函数返回值的检查。 使用async/await使得代码更易读。 记住替换'selector'为你的实际选择器。 请务必遵守目标网站的robots.txt协议,并尊重网站的服务器负载能力。