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

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

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

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

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

一个超级简单的node.js爬虫(内附表情包)-LMLPHP

页面很简单,大概思路就是先找到所有包括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表情包,献给连代码都懒得复制的同学……

神秘的程序员

04-24 18:51