吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3207|回复: 9
收起左侧

[其他转载] nodejs的小应用-批量顺序保存微信文章图片

 关闭 [复制链接]
笨笨家的唯一 发表于 2021-11-25 14:44
本帖最后由 笨笨家的唯一 于 2021-11-25 14:49 编辑

有些时候在微信中找到了一些图片资源,想都按顺序保存下来,但是吧,又懒得一个个的保存或者提取缓存,就搞了一个这个,保存的时候是按照图片出现的顺序来命名保存的,应该也算是一个爬虫吧
主要添加了 async包,用来控制并发数。默认保存在当前目录下的 weixinimg 文件夹中
[JavaScript] 纯文本查看 复制代码
const cheerio = require("cheerio");
const axios = require("axios");
const fs = require("fs");
const async = require("async");
const path = require("path");
const downloadImg = (url, paths) => {
    return new Promise((resolve, reject) => {
        let config = {
            headers: {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36",
            },
            responseType: "stream",
        };
        let res = axios.get(url, config);
        res.then(respone => {
            let fsw = fs.createWriteStream(paths);
            respone.data.pipe(fsw);
            fsw.on("close", () => {
                resolve(`${path.basename(paths)}保存完毕!`);
            });
        });
        res.catch(err => {
            console.log("no such file!");
            reject(0);
        });
    });
};

const baseurl = "https://mp.weixin.qq.com/s/8gkCrpbP3pitfQN2L9FTBA";//*****这里改成自己需要的内容*****
let result = {
    pathNames: [],
    urls: [],
};
axios
    .get(baseurl, {
        headers: {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36",
        },
    })
    .then(res => {
        let $ = cheerio.load(res.data);
        $("img.rich_pages").each((i, value) => {
            result.pathNames.push("./weixinimg/" + i + "." + $(value).attr("data-type"));
            result.urls.push($(value).attr("data-src"));
        });
        async.mapLimit(result.urls, 20, imgFun, allImgFun);
    });

function imgFun(url, callback) {
    let index = result.urls.indexOf(url);

    downloadImg(url, result.pathNames[index])
        .then(res => {
            console.log(res);
            callback(null, null);
        })
        .catch(err => {
            console.log("no such file");
            callback(null, null);
        });
}

function allImgFun(err, resultes) {
    console.log("图片保存在 weixingimg 文件夹下,请注意检查!");
}

才疏学浅,有不对的还希望大家批评指正

免费评分

参与人数 1热心值 +1 收起 理由
lixiuxiu + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

unmask 发表于 2021-11-25 23:21
思路非常好。
说一点锦上添花的建议,pathName和url封装成一个object后缓存到result,然后在imgFun的回调中消费每个object,就会减少好多index的计算。
最后,建议多用用es6的语法,比如map,reduce,lambda等,
 楼主| 笨笨家的唯一 发表于 2021-11-26 08:43
unmask 发表于 2021-11-25 23:21
思路非常好。
说一点锦上添花的建议,pathName和url封装成一个object后缓存到result,然后在imgFun的回调 ...

才开始学nodejs,很多都不会
arley 发表于 2021-11-26 09:10
2titanic 发表于 2022-3-8 08:39
楼主,有成型的exe吗?正需要这东东,谢谢!
slslsl 发表于 2022-3-8 12:13
思路挺好的,就是看实现有很多重复代码,可以整合精简一下
 楼主| 笨笨家的唯一 发表于 2022-3-14 10:13
2titanic 发表于 2022-3-8 08:39
楼主,有成型的exe吗?正需要这东东,谢谢!

初学者,不会打包
jelin 发表于 2022-8-4 09:08
正在学习nodejs,研究一下,感谢分享。
liang8210 发表于 2022-9-14 17:11
这个可以批量下载微信中合并转发的图片吗?
 楼主| 笨笨家的唯一 发表于 2022-9-16 11:26
liang8210 发表于 2022-9-14 17:11
这个可以批量下载微信中合并转发的图片吗?

这个下载的是微信公众号文章中的图片,你说的合并转发的是不是聊天记录图片啊?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表