[贴吧] 快速扒图,批量下载

in 前后端开发 with 0 comment

最近看《我推的孩子》大受震撼,于是打算收集漫画看看
然后想要爬 {{贴吧URL}}/p/8631227791 里的图片
F12看了一下贴吧的API接口,然后花半个小时用deno实现

(deno,yyds!)爬取结果

其实逻辑很简单的(可能这次用PHP开发更快),直接上代码

/**
 * 贴吧扒源图V1
 */
const id = prompt('请输入源TID(/p/后面的那一串)');
if(!id) throw new Error('TID不为空,异常退出');
try{
    var res = await (
        await fetch('https://tieba.baidu.com/photo/bw/picture/guide?tid='+id)
    ).json();
    if(res.no != 0) throw new Error(res.error);
}catch(e){
    throw new Error('失败:'+e.message);
}
let result = res.data.pic_list;
for (const id in result) {
    const img:string = result[id].img?.original?.waterurl;
    if(!img){
        console.warn('图片',id,'不包含官方图片,似乎有问题!');
        continue;
    }
    let data;
    try{
        data = (await fetch(img)).body.getReader();
    }catch{
        console.error('爬取',img,'失败');
        continue;
    }
    const ext = img.split('.').at(-1)?.split('?')[0];
    let file = await Deno.open('output/'+id+'.'+ext,{
        write: true,
        read: false,
        create: true
    });
    while(true){
        let res = await data.read();
        if(res.done) break;
        file.write(res.value);
    }
    file.close();
    console.log(id+'.'+ext,'saved.');
}

很简单地爬取成功

完美

Responses