基于nodejs 的多页面爬虫实例代码
发布时间 - 2026-01-11 01:33:26 点击率:次前言

前端时间再回顾了一下node.js,于是顺势做了一个爬虫来加深自己对node的理解。
主要用的到是request,cheerio,async三个模块
request
用于请求地址和快速下载图片流。 https://github.com/request/request
cheerio
为服务器特别定制的,快速、灵活、实施的jQuery核心实现.
便于解析html代码。 https://www.npmjs.com/package/cheerio
async
异步调用,防止堵塞。 http://caolan.github.io/async/
核心思路
- 用request 发送一个请求。获取html代码,取得其中的img标签和a标签。
- 通过获取的a表情进行递归调用。不断获取img地址和a地址,继续递归
- 获取img地址通过request(photo).pipe(fs.createWriteStream(dir + “/” + filename));进行快速下载。
function requestall(url) {
request({
uri: url,
headers: setting.header
}, function (error, response, body) {
if (error) {
console.log(error);
} else {
console.log(response.statusCode);
if (!error && response.statusCode == 200) {
var $ = cheerio.load(body);
var photos = [];
$('img').each(function () {
// 判断地址是否存在
if ($(this).attr('src')) {
var src = $(this).attr('src');
var end = src.substr(-4, 4).toLowerCase();
if (end == '.jpg' || end == '.png' || end == '.jpeg') {
if (IsURL(src)) {
photos.push(src);
}
}
}
});
downloadImg(photos, dir, setting.download_v);
// 递归爬虫
$('a').each(function () {
var murl = $(this).attr('href');
if (IsURL(murl)) {
setTimeout(function () {
fetchre(murl);
}, timeout);
timeout += setting.ajax_timeout;
} else {
setTimeout(function () {
fetchre("http://www.ivsky.com/" + murl);
}, timeout);
timeout += setting.ajax_timeout;
}
})
}
}
});
}
防坑
1.在request通过图片地址下载时,绑定error事件防止爬虫异常的中断。
2.通过async的mapLimit限制并发。
3.加入请求报头,防止ip被屏蔽。
4.获取一些图片和超链接地址,可能是相对路径(待考虑解决是否有通过方法)。
function downloadImg(photos, dir, asyncNum) {
console.log("即将异步并发下载图片,当前并发数为:" + asyncNum);
async.mapLimit(photos, asyncNum, function (photo, callback) {
var filename = (new Date().getTime()) + photo.substr(-4, 4);
if (filename) {
console.log('正在下载' + photo);
// 默认
// fs.createWriteStream(dir + "/" + filename)
// 防止pipe错误
request(photo)
.on('error', function (err) {
console.log(err);
})
.pipe(fs.createWriteStream(dir + "/" + filename));
console.log('下载完成');
callback(null, filename);
}
}, function (err, result) {
if (err) {
console.log(err);
} else {
console.log(" all right ! ");
console.log(result);
}
})
}
测试:
可以感觉到速度还是比较快的。
完整地址。https://github.com/hua1995116/node-crawler/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# nodejs多页面爬虫
# nodejs
# 爬虫
# 基于nodejs的网络爬虫
# NodeJS制作爬虫全过程
# nodejs爬虫抓取数据乱码问题总结
# NodeJS制作爬虫全过程(续)
# nodeJs爬虫获取数据简单实现代码
# Nodejs爬虫进阶教程之异步并发控制
# nodeJS实现简单网页爬虫功能的实例(分享)
# nodejs爬虫抓取数据之编码问题
# nodejs爬虫遇到的乱码问题汇总
# nodejs爬虫初试superagent和cheerio
# nodejs制作小爬虫功能示例
# 递归
# 下载图片
# 感觉到
# 较快
# 绑定
# 大家多多
# 是否存在
# 再回
# 数为
# 超链接
# 下载完成
# 被屏蔽
# requestall
# filename
# body
# pre
# createWriteStream
# fs
# photo
# pipe
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
b2c电商网站制作流程,b2c水平综合的电商平台?
网站制作免费,什么网站能看正片电影?
简单实现Android文件上传
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Java类加载基本过程详细介绍
原生JS实现图片轮播切换效果
如何续费美橙建站之星域名及服务?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何用y主机助手快速搭建网站?
python中快速进行多个字符替换的方法小结
如何安全更换建站之星模板并保留数据?
如何在万网利用已有域名快速建站?
如何在服务器上配置二级域名建站?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
如何注册花生壳免费域名并搭建个人网站?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何在景安服务器上快速搭建个人网站?
如何确保西部建站助手FTP传输的安全性?
js代码实现下拉菜单【推荐】
如何用PHP工具快速搭建高效网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何用PHP快速搭建CMS系统?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
IOS倒计时设置UIButton标题title的抖动问题
如何用虚拟主机快速搭建网站?详细步骤解析
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
深入理解Android中的xmlns:tools属性
JavaScript如何实现继承_有哪些常用方法
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel安装步骤详细教程_Laravel环境搭建指南
佛山网站制作系统,佛山企业变更地址网上办理步骤?
南京网站制作费用,南京远驱官方网站?
如何用IIS7快速搭建并优化网站站点?
Laravel如何实现多对多模型关联?(Eloquent教程)
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
如何快速配置高效服务器建站软件?
iOS UIView常见属性方法小结
高性能网站服务器部署指南:稳定运行与安全配置优化方案

