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

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

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

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

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. javascript 获取用户光标,插入文本

    图1 如图1所示,点击[函数名称],将函数名称添加到表达式内容框中,点击参数名称,将参数名称index1作为方法的参数添加到表达式内容中的表达式中. 该功能实现主要是采用了javascript获取鼠标 ...

  2. OC - 16.大文件下载

    大文件下载注意事项 若不对下载的文件进行转存,会造成内存消耗急剧升高,甚至耗尽内存资源,造成程序终止. 在文件下载过程中通常会出现中途停止的状况,若不做处理,就要重新开始下载,浪费流量. 大文件下载的 ...

  3. 外边距叠加collapsing-margin

    原载:Smallni | http://www.smallni.com/collapsing-margin/ 恩,margin叠加一直是个问题,也是我们一直会遇到的问题,很久以前就想把这个知识点整理下 ...

  4. Linux 查看文件内容的命令

    转载自:新浪博客 (观看档案内容 : cat, tac, more, less, head, tail, nl, 刚刚我们提到的都只是在于显示档案的外观,或者是移动与复制一个档案或目录而已,那么如果我 ...

  5. copy(source,destination)拷贝文件

    source 必须 规定要复制的文件 destination 复制文件的目的地 说明 :将文件从 source 拷贝到 destination.如果成功则返回 TRUE,否则返回 FALSE. 例如: ...

  6. CLR via C#可空值类型

    我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型 ...

  7. python函数参数的pack与unpack

    python函数参数的pack与unpack 上周在使用django做开发的时候用到了mixin(关于mixin我还要写一个博客专门讨论一下,现在请参见这里),其中又涉及到了一个关于函数参数打包(pa ...

  8. TableView_编辑 实例代码

    @interface MJViewController () <UITableViewDataSource, UITableViewDelegate> { NSMutableArray * ...

  9. Scheme是什么、怎么自定义Scheme、JLRoutes的使用-备

    转到移动端开发后居然现在才用到Scheme真是惭愧惭愧. URL Scheme是什么 相信大家都知道URL. http://www.apple.com就是一个URL. 而://之前的部分就称为Sche ...

  10. django + nginx + raspberypi + pidaro

        对于一个从事后台开发的人来说,搞了个网站,我自己都觉得有点意外.不是很懂html,不是很懂css,不是很懂js,不是很懂web开发模式/框架,不是很懂httpd/nginx--,web的东西样 ...