Node-crawler是一个功能强大的Node.js网络爬虫库,支持代理、异步操作、速率限制、可配置的请求池、jQuery选择器和HTTP/2协议。作为web爬虫工具,它能够帮助开发者高效地进行数据抓取和网页分析。无论你是爬虫新手还是经验丰富的开发者,这些实用的代码示例都将为你提供有价值的参考。
🚀 基础爬虫配置方法
最简单的node-crawler使用方式只需要几行代码就能实现网页抓取:
import Crawler from "crawler";
const c = new Crawler({
maxConnections: 10,
callback: (error, res, done) => {
if (error) {
console.log(error);
} else {
const $ = res.$;
console.log($("title").text());
}
done();
},
});
c.add("http://www.amazon.com");
这个基础示例展示了如何创建一个最多10个并发连接的爬虫实例,并抓取亚马逊网站的页面标题。
📊 批量URL抓取技巧
当需要抓取多个网站时,可以一次性添加URL列表:
c.add([
"http://www.google.com/",
"http://www.yahoo.com",
"http://www.bing.com"
]);
⚡ 速率限制配置指南
为了避免被目标网站封禁,合理设置速率限制至关重要:
const c = new Crawler({
rateLimit: 1000, // 每秒最多1个请求
callback: (err, res, done) => {
console.log(res.$("title").text());
done();
},
});
🔄 自定义参数传递方案
在实际爬虫项目中,经常需要在不同请求间传递参数:
c.add({
url: "http://www.google.com",
userParams: {
category: "search",
depth: 1,
source: "main"
},
});
然后在回调函数中访问这些参数:
console.log(res.options.userParams);
📁 文件下载实现方法
node-crawler不仅可以抓取文本内容,还能下载图片、PDF等二进制文件:
import Crawler from "crawler";
import fs from "fs";
const c = new Crawler({
encoding: null, // 保持原始二进制数据
jQuery: false,
callback: (err, res, done) => {
if (err) {
console.error(err.stack);
} else {
fs.createWriteStream("downloaded_file.png").write(res.body);
}
done();
},
});
🛡️ 请求预处理技术
在发送请求前进行预处理操作:
const c = new Crawler({
preRequest: (options, done) => {
console.log("准备发送请求:", options.url);
done();
},
callback: (err, res, done) => {
console.log(res.statusCode);
done();
},
});
🌐 HTTP/2协议支持
充分利用现代网络协议的效率优势:
crawler.send({
url: "https://nghttp2.org/httpbin/status/200",
method: "GET",
http2: true,
callback: (error, response) => {
if (error) {
console.error(error);
}
console.log(response.body);
},
});
🔄 代理轮换策略
使用多个IP地址提高爬虫的稳定性和成功率:
const IPManager = {
index: 0,
addresses: ["address1", "address2", "address3"],
setAddress: function (options) {
let address = this.addresses[this.index];
this.index = ++this.index % this.addresses.length;
options.address = address;
options.rateLimiterId = Math.floor(Math.random() * 15);
},
};
crawler.on("schedule", options => {
IPManager.setAddress(options);
});
📈 优先级队列管理
根据任务重要性设置不同的优先级:
c.add({
url: "http://important-site.com",
priority: 1 // 最高优先级
});
c.add({
url: "http://normal-site.com",
priority: 5 // 中等优先级
});
🎯 错误处理最佳实践
完善的错误处理机制确保爬虫的健壮性:
const c = new Crawler({
retries: 3,
retryInterval: 5000,
callback: (error, res, done) => {
if (error) {
console.error("请求失败:", error.message);
// 记录错误日志或采取其他恢复措施
} else {
// 正常处理响应
console.log("成功获取数据");
}
done();
},
});
这些实用的node-crawler代码示例涵盖了从基础配置到高级功能的各个方面。通过合理组合这些技巧,你可以构建出功能强大且稳定的网络爬虫应用。记得在实际使用中根据目标网站的具体要求调整参数设置,遵守robots.txt规则,做一名负责任的爬虫开发者!💪
核心模块参考:
- 主要爬虫类:src/crawler.ts
- 配置选项:src/options.ts
- 队列管理:src/lib/queue.ts
- 速率限制器:src/rateLimiter/rateLimiter.ts
掌握这些node-crawler的使用技巧,你将能够轻松应对各种网页抓取需求,无论是简单的数据采集还是复杂的分布式爬虫系统都能游刃有余。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




