node.js扒个表情包,聊天免尴尬
- 依赖
// package.json
{
"name": "batu",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"cheerio": "^1.0.0-rc.3"
},
"dependencies": {
"axios": "^0.19.0"
}
}
- 拉取页面
// app.js
const https = require('https')
const cheerio = require('cheerio')
const request = require('./request')
const fs = require('fs')
const hostname = 'fabiaoqing.com'
async function getPageImage(path) {
let pageContentBuffer = await request({
hostname,
path,
})
let pageContent = pageContentBuffer.toString('UTF-8')
const pageDom = cheerio.load(pageContent)
Array.from(pageDom('#bqblist > a')).forEach(async a => {
let pageDetailPath = pageDom(a).attr('href')
// 获取详情
let pageDetailBuffer = await request({
hostname,
path: pageDetailPath
})
let pageDetailContent = pageDetailBuffer.toString('UTF-8')
const detailDom = cheerio.load(pageDetailContent)
let title = detailDom('#bqb > div:first-child > h1').text()
let images = detailDom('#bqb > div:first-child .swiper-wrapper img')
images.each(async (index, img) => {
let imgUrl = img.attribs['data-original']
let imgTitle = img.attribs.title
let suffix = imgUrl.slice(imgUrl.lastIndexOf('.'))
let folderPath = `../表情包/${title}`
let imgContent = await request(imgUrl, 'http')
fs.mkdirSync(folderPath, { recursive: true })
console.log(`${folderPath}/${imgTitle}${suffix}`, imgUrl, imgContent)
fs.writeFile(`${folderPath}/${imgTitle}${suffix}`, imgContent, err => {
if (err) {
console.log(err, 'write-err')
}
})
})
})
}
getPageImage('/bqb/lists/type/hot/page/1.html')
- 请求配置
// request
const https = require('https')
const http = require('http')
module.exports = function request(params, protocol) {
const fetchs = protocol ? http : https
return new Promise((resolve, reject) => {
debugger
let data = params
if (params instanceof Object) {
let { hostname, path, method = 'GET' } = params
data = {
hostname,
path,
method,
}
}
let req = fetchs.request(data, (res) => {
let tempBuffers = []
let size = 0
res.on('data', buffer => {
tempBuffers.push(buffer)
size += buffer.length
});
res.on('end', () => {
let buf = Buffer.concat(tempBuffers, size)
resolve(buf)
})
})
req.on('error', (err) => {
console.error(err, 'requires-error');
reject(err)
});
req.end();
})
}