关键点:
- 分析请求网址的精简(request / http)
- 分析图片地址——正则匹配
- fs模块
createWriteStream
1、请求网址精简
https://image.baidu.com/search/index?tn=baiduimage&word=网址
2、分析图片地址
http://img5.imgtn.bdimg.com/it/u=2577576757,3841266884&fm=26&gp=0.jpg
http://img3.imgtn.bdimg.com/it/u=3004133359,1252464200&fm=26&gp=0.jpg
http://img4.imgtn.bdimg.com/it/u=3385138246,1740869554&fm=26&gp=0.jpg
http://img0.imgtn.bdimg.com/it/u=2479299018,195912564&fm=26&gp=0.jpg
// http://img数字.imgtn.bdimg.com/it/u= 数字 ,& .jpg
let reg = /https:\/\/img\d+\.imgtn\.bdimg\.com[\/0-9a-z_=,&]+\.(jpg|png|gif)/ig;
3、保存图片至本地
如果request只传入options参数(或者直接传入url)
它返回的是可回流,直接通过pipe API
写入到可写流
fs.createWriteStream
写入至本地文件夹
const request = require('request');
const path = require('path');
const fs = require('fs');
// 中文编码
let word = encodeURI('新垣结衣')
request({
method: 'get',
url: 'https://image.baidu.com/search/index?tn=baiduimage&word=' + word,
headers: {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}
}, (err,res, data) => {
// console.log(data)
let reg = /https:\/\/img\d+\.imgtn\.bdimg\.com[\/0-9a-z_=,&]+\.(jpg|png|gif)/ig;
let infoArray = data.match(reg);
// console.log(infoArray)
// 保存图片
infoArray.forEach((v, i) => {
request(v).pipe(fs.createWriteStream(path.join(__dirname, './baiduimg/' + i + '.jpg')));
});
})