之所以会想到要写爬虫,并不是出于什么高大上的理由,仅仅是为了下载个表情包而已……

容我先推荐一下西乔出品的神秘的程序员表情包。

这套表情包着实是抵御产品、对付测试、嘲讽队友、恐吓前任的良品,

不过不知道用多了会不会挨揍……

however,我就是想要这套表情包,但是因为腾讯的图片链接的问题,直接用chrome另存为的话,无法识别图片格式,而且这么多图一个个另存也太麻烦了,身为程序员怎么能做这种重复性的工作呢?

这种情况下就该上爬虫了,因为目的很简单,所以也不搞太复杂的爬虫,怎么简单怎么来,这里我用了两个包,分别是:

request:

这个包的原理我也没仔细看,大概就是对http.get的封装之类的吧,这个包可以用来简化请求网页和下载图片的过程,其实这个过程用http.get来写也不是很复杂,但是能懒则懒嘛……

cheerio:

这个包类似于一个简化的jQuery,只包含dom部分的功能,而且专门用于node环境中运行,我用它来解析页面。

开始干活###

先用npm安装一下需要的包

npm install request cheerio

然后引入到JS文件中,并简单写一下下载图片的代码

"use strict"
const request = require('request')
const cheerio = require('cheerio')
const fs = require('fs')
//下载
const download = (name, src, type)=>{
let ws = fs.createWriteStream('./download/'+id+'.'+type)
request(src).pipe(ws)
}

之后需要获取页面内容,并交给cheerio解析

const url = ""
request(url, (error, response, body)=>{
let $ = cheerio.load(body)
//在页面里寻找想要的图片并下载
console.log('done')
})

在写剩下的代码之前,我得先看看目标页面到底是什么样的,不然也没法找图片啊_(:з」∠)_

F12

页面很简单,大概思路就是先找到所有包括data-type的img标签,然后data-type就是图片类型,data-src就是图片地址。

补上关键代码之后,爬虫大概是这个样子的:

"use strict"
const request = require('request')
const cheerio = require('cheerio')
const fs = require('fs')
//下载
const download = (name, src, type)=>{
let ws = fs.createWriteStream('./download/'+name+'.'+type)
request(src).pipe(ws)
} const url = ""
request(url, (error, response, body)=>{
let $ = cheerio.load(body)
let imgs = $("img[data-type]")
imgs.each((i,e)=>{
let type = $(e).attr('data-type')
let src = $(e).attr('data-src')
download(i, src, type)
})
console.log('done')
})

cheerio的语法和jquery基本一样,着实省了好多事。

现在这个爬虫填上url就可以用啦╰(°▽°)╯

另外附上做好的QQ表情包,献给连代码都懒得复制的同学……

神秘的程序员

一个超级简单的node.js爬虫(内附表情包)的更多相关文章

  1. 一个用来爬小说的简单的Node.js爬虫

    小说就准备点天下霸唱和南派三叔的系列,本人喜欢看,而且数据也好爬.貌似因为树大招风的原因,这两作者的的书被盗版的很多,乱改的也多.然后作者就直接在网上开放免费阅读了,还提供了官网,猜想作者应该是允许爬 ...

  2. node.js爬虫

    这是一个简单的node.js爬虫项目,麻雀虽小五脏俱全. 本项目主要包含一下技术: 发送http抓取页面(http).分析页面(cheerio).中文乱码处理(bufferhelper).异步并发流程 ...

  3. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  4. Node JS爬虫:爬取瀑布流网页高清图

    原文链接:Node JS爬虫:爬取瀑布流网页高清图 静态为主的网页往往用get方法就能获取页面所有内容.动态网页即异步请求数据的网页则需要用浏览器加载完成后再进行抓取.本文介绍了如何连续爬取瀑布流网页 ...

  5. 打算写一个《重学Node.js》系列,希望大家多多支持

    先放上链接吧,项目已经开始2周了:https://github.com/hellozhangran/happy-egg-server 想法 现在是2019年11月24日,还有人要开始学习Node.js ...

  6. Node.js aitaotu图片批量下载Node.js爬虫1.00版

    即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaot ...

  7. Node.js umei图片批量下载Node.js爬虫1.00

    这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ...

  8. Node.js abaike图片批量下载Node.js爬虫1.01版

    //====================================================== // abaike图片批量下载Node.js爬虫1.01 // 1.01 修正了输出目 ...

  9. Node.js abaike图片批量下载Node.js爬虫1.00版

    这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaik ...

随机推荐

  1. animation的6个属性

    @keyframes 规定动画.   animation 所有动画属性的简写属性,除了 animation-play-state 属性.   animation-name 规定 @keyframes ...

  2. Web学习资源及手册查询整理

    入门了解html.css.js.jQuery:http://www.w3school.com.cn/, bootstrap.nodejs.php.jQuery入门:http://www.runoob. ...

  3. C语言之头文件,static与const关键字

    [前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔 ...

  4. linux c下几种定时器实现

    1.alarm n秒后触发一次,不是循环的2.setitimer 可以发出3种信号给自己,3.timerfd 这个接口基于文件描述符,通过文件描述符类似epoll那种的可读事件进行超时通知,能够被用于 ...

  5. 富文本web编辑器(UEditor)

    展示效果:

  6. JavaScript设计模式之构造函数模式

    一.构造函数模式概念 构造函数用于创建特定类型的对象——不仅声明了使用过的对象,构造函数还可以接受参数以便第一次创建对象的时候设置对象的成员值.你可以自定义自己的构造函数,然后在里面声明自定义类型对象 ...

  7. jQuery实现按Enter键触发事件?

    按Enter触发 $(function(){ document.onkeydown = function(e){ var ev = document.all ? window.event : e; ) ...

  8. 水仙花 AC 杭电

    水仙花数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. Python异常的使用

    伪代码: try: 出错部分的代码...... except Exception as e: print '404网页' #Exception是所有错误类型的父类,包括所有出错信息 finally: ...

  10. xcode5 自定义模板

    经过一番周折,终于在xcode5上实现了一个简单的自定义模板,在项目中集成NSLogger库(增强NSLog的功能,https://github.com/fpillet/NSLogger)——新建项目 ...