『004』会爬取微信文章的小爬虫ヾ(•ω•`)o

Maxmon

前言

老板:微信公众号要精简,把之前发的文章都删掉吧!

Maxmon:好的~

Maxmon:(万一之后文章又需要了,要是直接删了多可惜,偷偷地做个备份吧)

准备工作

看了下公众号,有直接删除文章的按钮,但好像没有保存已发布文章的地方,那怎么做存储呢?

想来想去,就想到了爬虫~

开始代码

const axios = require('axios'); // 网络请求
const fs = require('fs'); // 文件存储
const cheerio = require('cheerio'); // 解析HTML文件

/**
 * 获取文章函数
 */
async function getArticle(articleUrl) {
    console.log('articleUrl', articleUrl)
    let a = await axios.get(articleUrl);
    let data = a.data;
    let $ = cheerio.load(data);
    let title = $('#activity-name').text().replace(/[\s—|]/g,''); // 获取 微信文章-标题
    let timeMatch = data.match(/var publish_time = "(.*?)\"/) // 获取 微信文章-发布时间
    let time = '0000-00-00';
    if (timeMatch) time = timeMatch[1] || time;
    let imgs = $('img')
    let fileName = `${time} ${title}`;
    // 判断本地是否已经抓过这个页面,抓取过就跳过
    if (fs.existsSync(`${fileName}.html`)) {
        console.log(fileName, '已抓取 跳过')
        return;
    }
    for (let i = 0; i < imgs.length; i++) {
        let attribs = imgs[i].attribs;
        let url = attribs['data-src'];
        if (url) {
            let imgType = attribs.type || 'jpeg';
            if (!fs.existsSync(fileName)) {
                fs.mkdirSync(fileName)
            }
            let locPath = `./${fileName}/${i}.${imgType}`
            await getImg(url, locPath);
            imgs[i].attribs.src = locPath;
        }
    }
    fs.writeFileSync(`${fileName}.html`, $.html());
}

/**
 * 获取图片等资源文件
 */
async function getImg(url, locPath) {
    let b =  await axios.get(url, {
        responseType: "arraybuffer",
    });
    fs.writeFileSync(locPath, Buffer.from(b.data, 'base64'));
}

getArticle('https://mp.weixin.qq.com/s/p4It1825oDJSBUZsSax1cA');

小插叙

在抓取完所有网页之后,我大胆地删除了已发布的文章,大概50多篇呢,然后…

。。。。我发现,原来文章素材那里本来就是有备份的?

体验地址

  • 最后成功抓取的页面

https://maxmon.top/blog/004/2019-05-21 世界家庭医生日携手家庭医生,共筑健康生活.html
https://maxmon.top/blog/004/2018-07-02 夏季防蚊小妙招,家有宝宝的一定要看哦!.html

项目地址

https://gitee.com/ko-orz/wechat_article_crawler

感谢

  • 老板
  • node、fs、axios、cheerio、微信
  • 没有搞清楚微信公众号原理的自己
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值