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

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

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

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

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. 织梦(dedecms)如何清空全部文章和删除后新增文章id号归1的方法

    很多朋友在使用织梦程序做网站的过程中,难免需要添加一些测试文章用于测试网站功能模板等,还有些人朋友网站改版需要变更内容的时候,面对着众多的老文章后总是一筹莫展! 由于织梦后台并不自带一键删除整站文章的 ...

  2. tomcat报404

    很久没有用eclipse了,尝试了使用下,竟然将简单的配置tomcat都忘了. 自己新建一个工程,在tomcat发布以后,报404,经查Serves下的web.xml中,欢迎页面是index.jsp, ...

  3. iOS移动端架构的那些事!(转载)

    一个app的初始阶段,必然是先满足各种业务需求.然后,经过多次版本迭代之后,先前的由于急于满足需求而导致的杂乱代码则会充斥整个项目.而此时,项目有了一定的规模,有了一定数量的开发人员,那么为了达到快速 ...

  4. php网站判断用户是否是手机访问的方法

    PHP网站判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面.随着移动设备的普及,网站也会迎来越来越多移动设备的访问.用适应PC的页面,很多时候对手机用户不友好,那么有些时候,我们需要 ...

  5. bzoj2066: [Poi2004]Gra

    Description 让我们考虑一个在m x 1 的板子上玩的游戏,板子被从1 到 m编号. 现在板子上有n 个棋子, 每个都严格占据板子上的一个格子. 没有一个棋子占据格子m. 每个单独的移动遵循 ...

  6. URL加载系统----iOS工程师必须熟练掌握

    URL加载系统----iOS工程师必须熟练掌握     iOS根本离不开网络——不论是从服务端读写数据.向系统分发计算任务,还是从云端加载图片.音频.视频等.   当应用程序面临处理问题的抉择时,通常 ...

  7. LA 小、杂、乱题合辑

    ${\Large 1.}$(来自丘维声『高等代数』(上)$P_{189,194}$) $(1).$ 设$A,B$分别是数域${\mathbb F}$上$n\times n,m\times n$矩阵. ...

  8. mongoose CastError: Cast to ObjectId failed for value

    restfull路由如下: router.get('/:id', controller.show); mongoes代码如下: exports.show = function(req, res) { ...

  9. 业内人士详述SIEM建设的演进过程

    http://www.verydemo.com/demo_c289_i22006.html 4A http://www.verydemo.com/demo_c281_i40888.html 从SIEM ...

  10. cf C. Hamburgers

    http://codeforces.com/contest/371/problem/C 二分枚举最大汉堡包数量就可以. #include <cstdio> #include <cst ...