利用node.js写一个爬取知乎妹纸图的小爬虫
发布时间 - 2026-01-11 00:57:18 点击率:次前言

说起写node爬虫的原因,真是羞羞呀。一天,和往常一样,晚上吃过饭便刷起知乎来,首页便是推荐的你见过最漂亮的女生长什么样?,点进去各种漂亮的妹纸爆照啊!!!,看的我好想把这些好看的妹纸照片都存下来啊!一张张点击保存,就在第18张得时候,突然想起。我特么不是程序员么,这种手动做的事,怎么能做,不行我不能丢程序员的脸了,于是便开始这次爬虫之旅。
原理
初入爬虫的坑,没有太多深奥的理论知识,要获取知乎上帖子中的一张图片,我把它归结为以下几步。
- 准备一个url(当然是诸如你见过最漂亮的女生长什么样?)
- 获取这个url的html内容,并分析其中的dom结构,遍历找到这些漂亮的妹纸图片url
- 获取图片内容
- 将图片内容写入本地文件
开始动手
大概知道原理之后我们就可以开干了
准备一个url
这个最简单了,去知乎随便一搜就是一大把,我们以
发一张你认为很漂亮的|美女|照片?
为例子,先来分析一下这个页面的dom结构,其实很简单,知乎的一个页面中会包含很多种类型的图片,有头像,用户评价上传的图片啥的。基本上在noscript种都可以找到对应的图片地址。
获取这个url的html内容,并且拿到当前页面noscript中的img链接
这一步我们需要会点简单的nodejs的知识,以及用到一个库叫cheerio,这个库具体是用来做什么的,详细请移步cheerio。
简单来说就是可以在命令行中使用jQuery来搜索遍历获取相应的元素。
那么怎样才能获取这个帖子的html呢
使用nodejs的https模块
var https = require('https')
getAllHtml (url, callback) {
let sHtml = '',
_this = this;
https.get(url, (res) => {
res.on('data', (data) => {
sHtml += data;
});
res.on('end', () => {
callback.bind(_this, sHtml)();
})
}).on('error', (err) => {
console.log(err);
});
}
通过以上操作拿到网站的html之后,便是遍历出我们需要的图片地址来了
filterHtml (sHtml, filePath) {
let $ = cheerio.load(sHtml), // 将上一步拿到的网站html传入cheerio.load,便得到类似于包装过的jQuery对象,可以像jQuey的选择器一样来选择元素
$Imgs = $('noscript img'),
imgData = [],
_this = this;
$Imgs.each((i, e) => {
let imgUrl = $(e).attr('src'); //取出对应的url
imgData.push(imgUrl);
// 将url传入开始下载
_this.downloadImg(imgUrl, _this.filePath,
function (err) {
console.log(imgUrl + 'has be down');
});
});
console.log(imgData);
}
有了图片的url,如何下载到本地呢?
我们需要使用request这个库,简单的调用一下api再结合node原生写文件的api。
downloadImg (imgUrl, filePath, callback) {
let fileName = this.parseFileName(imgUrl);
request(imgUrl).pipe(fs.createWriteStream('./' + filePath + '/'+fileName)).on('close', callback && callback);
}
到这里就大功告成了,是不是很简单!!!已经将源码上传,欢迎大家下载查看。
gitHub地址:https://github.com/qianlongo/node-small-crawler
本地下载地址:http://xiazai./201705/yuanma/node-small-crawler().rar
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用node.js能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# nodejs爬取动态页面
# nodejs爬虫抓取知乎
# nodejs 爬取页面
# node.js实现简单爬虫示例详解
# node.js做一个简单的爬虫案例教程
# node.js爬虫框架node-crawler初体验
# Node.js爬虫如何获取天气和每日问候详解
# 基于node.js实现爬虫的讲解
# node.js学习笔记之koa框架和简单爬虫练习
# 浅谈Node.js爬虫之网页请求模块
# 使用 Node.js 开发资讯爬虫流程
# 基于node.js制作简单爬虫教程
# node.js爬虫爬取拉勾网职位信息
# Node.js 实现简单爬虫的示例代码
# 遍历
# 见过
# 最漂亮
# 上传
# 来了
# 就在
# 本地下载
# 做什么
# 把它
# 之旅
# 很简单
# 大功告成
# 欢迎大家
# 我好
# 这篇文章
# 几步
# 你认为
# 很漂亮
# 想把
# 能做
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用PHP快速搭建高效网站?分步指南
如何在阿里云服务器自主搭建网站?
实例解析angularjs的filter过滤器
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
教你用AI将一段旋律扩展成一首完整的曲子
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
如何快速查询网址的建站时间与历史轨迹?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何用JavaScript实现文本编辑器_光标和选区怎么处理
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel如何创建自定义Artisan命令?(代码示例)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Laravel模型事件有哪些_Laravel Model Event生命周期详解
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
JS碰撞运动实现方法详解
Laravel如何配置Horizon来管理队列?(安装和使用)
如何用西部建站助手快速创建专业网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何用花生壳三步快速搭建专属网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
网站图片在线制作软件,怎么在图片上做链接?
如何构建满足综合性能需求的优质建站方案?
如何正确选择百度移动适配建站域名?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
重庆市网站制作公司,重庆招聘网站哪个好?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
js代码实现下拉菜单【推荐】
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
如何获取上海专业网站定制建站电话?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置

