这两天回顾了一下node,顺便就玩玩爬取图片。主要涉及到的知识有。
- fs流式数据传输
- axios 请求数据
- request 请求数据
- cheerio 操作对应dom数据
在网上有使用node内置的http进行数据请求的,这也是可以的。为了方便我们使用这种方式。如想要来玩玩,可以直接git cloe即可
gitee地址:https://gitee.com/baske/node_spider_pic.git
前期准备
新建一个项目名为:project_01,输入命令在控制台,使其生成package.json文件:
npm init
在控制台输入npm install命令下载需要的模块,在本项目中需要的request和cheerio模块,将使用命令进行下载到本地:
npm install request axios cheerio -S
在根路径创建app.js文件,把代码复制进去即可。
完成后直接上代码
const request = require('request')
const axios = require('axios')
const cheerio = require('cheerio')
const fs = require('fs')
//https://www.tupianzj.com/meinv/20160118/39238.html
async function spiker(){
let href = []
let src = await axios.get('https://www.tupianzj.com/meinv/20210104/223044.html')
let $ = cheerio.load(src.data)
$('.pages ul li a').each(function(){
// console.log($(this).attr('href'))
href.push($(this).attr('href'))
// console.log($(this).attr('href'))
})
href.shift()
href.shift()
href.shift()
// console.log(href)
let pic_index = 0
href.forEach(async (i) => {
if(i){
// console.log('https://www.tupianzj.com/meinv/20210104/223044.html' + i)
let url = 'https://www.tupianzj.com/meinv/20210104/' + i
// console.log(url)
let pic_src = await getPic(url)
request(pic_src).pipe(
fs.createWriteStream('./img/'+ pic_index +'.jpg')
)
pic_index++
}
// let a = i.match(reg)
// console.log(a)
// console.log(pic)
})
// console.log(pic)
async function getPic(url){
let html = await axios.get(url)
let $ = cheerio.load(html.data)
let src = $('#bigpicimg').attr('src')
return src
// fs.writeFileSync('./pic.txt',src + '\r')
}
}
spiker()
在终端中使用node app.js即可。