southernMD 南山有壶酒
首页
文章
留言板
十年
关于
音乐
作词 : 偽物
分类
- 暂无内容
站点信息
标签云
目录
作词 : 偽物

如何爬取某知名gal网站背景图
2023/7/6 21:37:25 |
0 |
65
爬虫
完整代码,记得替换url
js
复制代码
const request = require('request');//
const iconv = require('iconv-lite');//设置编码格式
const Cheerio = require('cheerio');
const axios = require('axios');
const fs = require('fs');
//封装成函数
const requestPromise = (url) =>{
return new Promise((resolve, reject) =>{
//先取消原有的编码格式
request(url, {encoding:null},function (error, response, body) {
if(response.statusCode == 200){
//如果原网页编码格式有问题,可以转成ubt8格式的,该括号内utf-8为原网页编码格式(演示使用)
const bufs = iconv.decode(body, 'utf-8');
const html = bufs.toString('utf-8');//转成utf-8
const $ = Cheerio.load(html);//成功后用cheerio加载
const urlRegex = /url\((['"]?)(.*?)\1\)/g;
let matches;
const urls = []
while ((matches = urlRegex.exec($('style'))) !== null) {
const url = matches[2];
urls.push(url);
}
urls.pop()
resolve(urls);
}
else{
console.log(response.statusCode)
reject(error);
}
});
})
}
const url = '某知名弟弟网站url';
const urls = [];
const PromiseUrls = []
for(let i=0;i<100;i++){
PromiseUrls.push(new Promise((resolve, reject) => {
setTimeout(() => {
requestPromise(url + `?t=${Math.random()}`)
.then(resolve)
.catch(reject);
}, 1000 * i); // Delay of 1 second between each request
}))
}
Promise.all(PromiseUrls).then((res)=>{
const urlList = [...new Set(res.flat())]
urlList.forEach((item)=>{
axios.get(item, { responseType: 'arraybuffer' })
.then(response => {
fs.writeFileSync(`./galImage/${item.substr(item.lastIndexOf('/')+1)}`, response.data, 'binary');
})
.catch(error => {
console.error('图片下载失败:', error);
});
})
}).catch(err => {
console.error(err);
});
使用request函数直接请求网站地址并不设置编码模式可以直接获取到网站的html源代码,某知名gal网站将图片地址直接放在了页面style标签内。
所以我可以直接通过$('style')然后直接正则获取链接最后通过axios下载然后保存就可以了
评论
评论列表(0)
移至左侧
回到顶部
日间模式
开启音乐
隐藏面板
a