Headless Chrome 爬虫工具 HCCrawler API 详解
概述
Headless Chrome Crawler (HCCrawler) 是一个基于 Puppeteer 的无头浏览器爬虫框架,提供了强大的网页抓取和数据处理能力。本文将深入解析 HCCrawler 的核心 API,帮助开发者快速掌握这一工具的使用方法。
核心类与方法
HCCrawler 类
HCCrawler 是框架的核心类,提供了启动和连接 Chromium 实例的方法。
基本使用示例
const HCCrawler = require('headless-chrome-crawler');
(async () => {
const crawler = await HCCrawler.launch({
evaluatePage: (() => ({
title: $('title').text(),
})),
onSuccess: (result) => {
console.log(result);
},
});
crawler.queue('https://example.com/');
await crawler.onIdle();
await crawler.close();
})();
主要方法
-
HCCrawler.connect([options])
- 连接已存在的 Chromium 实例
- 重要参数:
maxConcurrency
: 并发页面数(默认10)maxRequest
: 最大请求数(0表示无限制)exporter
: 结果导出器cache
: 缓存实现
-
HCCrawler.launch([options])
- 启动新的 Chromium 实例
- 参数与 connect 方法类似,但增加了 Puppeteer 启动选项
-
crawler.queue([options])
- 添加请求到队列
- 支持多种参数配置:
url
: 目标URL(必须)maxDepth
: 链接跟随深度priority
: 请求优先级delay
: 请求间隔时间
爬虫控制方法
- crawler.pause() 暂停队列处理
- crawler.resume() 恢复队列处理
- crawler.clearCache() 清除缓存
- crawler.close() 关闭浏览器实例
- crawler.onIdle() 等待队列空闲
状态查询方法
- crawler.isPaused() 检查是否暂停
- crawler.queueSize() 获取队列大小
- crawler.requestedCount() 获取已请求计数
高级功能
请求生命周期事件
HCCrawler 提供了完整的请求生命周期事件:
crawler.on('requeststarted', (options) => {
console.log('请求开始:', options.url);
});
crawler.on('requestfinished', (options) => {
console.log('请求完成:', options.url);
});
crawler.on('requestfailed', (error) => {
console.error('请求失败:', error.options.url);
});
自定义爬取逻辑
通过 customCrawl
选项可以直接使用 Puppeteer 原生 API:
const crawler = await HCCrawler.launch({
customCrawl: async (page, crawl) => {
await page.setViewport({ width: 1920, height: 1080 });
return crawl();
}
});
结果导出
HCCrawler 支持多种导出方式:
- CSVExporter: CSV格式导出
- JSONLineExporter: JSON行格式导出
- 自定义导出器(继承 BaseExporter)
最佳实践
- 合理设置并发数:根据目标网站承受能力调整 maxConcurrency
- 使用缓存:减少重复请求,提高效率
- 遵守robots.txt:设置 obeyRobotsTxt 为 true
- 错误处理:实现 onError 回调处理异常
- 请求优先级:利用 priority 和 depthPriority 优化爬取顺序
常见问题解决方案
- 内存泄漏:定期清理缓存,合理设置 maxRequest
- 请求失败:调整 retryCount 和 retryDelay
- 反爬机制:设置合理的 delay 和 userAgent
- 性能优化:禁用不必要的功能如 screenshot 和 jQuery
通过本文的详细解析,开发者可以全面掌握 HCCrawler 的强大功能,构建高效稳定的网页爬虫应用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考