如何通过程序自动抓取微信公众号文章的内容和视频

如何通过程序自动抓取微信公众号文章的内容和视频

点点

2021-03-30 20:31 阅读 782 喜欢 0

微信公众号文章里的视频怎么下载

如果只是针对一个文章的话是很简单的,直接通过复制文章地址 ,在谷歌浏览器打开后,然后在视频右下角点击全屏,点击右下角的点点点,点击下载即可。

当然也可以通过F12来查看video标签或查看network数据请求。

这些都是一些基本的操作了,下边主要是通过puppeteer来获取视频并下载。

之前通过puppeteer其实已经做过很多事情了,登录啊 签到啊 等等.因为总体来说没有什么技术含量的,目前主要是做个铺垫,后续研究下如何抓取所有公众号的所有文章。

直接上代码

/**

const puppeteer = require('puppeteer'); const path = require('path'); const fs = require('fs'); const helper = require('think-helper');//创建目录api const axios = require('axios'); const folder = __dirname;

let url = https://mp.weixin.qq.com/s/fwY6FPFCfgdJNTd22qqjKg; // let url = https://mp.weixin.qq.com/s?__biz=MjM5MDAwNTk0MA==&mid=2653094471&idx=1&sn=8f430a2f1764714815ee9f523091b88b;

function wsf(rs,ws){ return new Promise((r,j)=>{ rs.pipe(ws); ws.on('close',e=>{ r(); }) }); }

(async function(){

let browser = await puppeteer.launch({
    headless : true,
    executablePath : 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'
});

console.log(`开启新页面:[${url}]`);
const page = await browser.newPage();

let asyncArr = [];
page.on('response',async (res)=>{
    try{
        let json = await res.json();//
        if(json && json.url_info){
            console.log(`获取到异步视频数据.`);
            asyncArr = asyncArr.concat(json.url_info);
        }
    }catch(e){}
})
console.log(`等待页面数据请求加载完成。`)
await page.goto(url,{
    waitUntil : 'networkidle2'//请求结束
});

//url
let videoArr = await page.evaluate(()=>{
    return $('video').get().map(t=>{
        return $(t).attr('src');
    })
});

//获取公众号信息
let name = await page.evaluate(()=>{
    return $('.account_nickname_inner').length > 0 ? $('.account_nickname_inner').text() : $('.rich_media_meta_nickname #js_name').text();
});
let title = await page.evaluate(()=>{
    return $('.common_share_title').length > 0 ? $('.common_share_title').text() : $('.rich_media_title').text();
});
name = name.trim();
title = title.trim();
console.log(`获取到公众号信息:[${name}-${title}]`)


//创建目录
let folderPath = path.join(folder,name,title);
helper.mkdir(folderPath);//创建目录
//对视频做处理。
let vr = [];

vr =vr.concat(videoArr.map(t=>{
    let u = new URL(t);
    let fileName = title+path.extname(u.pathname);
    let filePath = path.join(folderPath,fileName);
    return {
        title : fileName,
        filePath : filePath,
        url : t
    }
}));

vr = vr.concat(asyncArr.map(t=>{
    let u = new URL(t.url);
    let fileName = t.video_quality_wording +'-'+ title+path.extname(u.pathname);
    let filePath = path.join(folderPath,fileName);
    return {
        title : fileName,
        filePath : filePath,
        url : t.url
    }
}));

console.log(`开始准备下载视频文件`);
for(let video of vr){
    console.log(`开始下载视频:[${video.title}]`)
    await axios.get(video.url,{
        responseType : 'stream'
    }).then(async rs=>{
        await wsf(rs.data,fs.createWriteStream(video.filePath));
    })
}

//将页面滚动到最底部
await page.evaluate(()=>{
    $('html').get(0).scrollTop = $('html').get(0).scrollHeight
});
console.log('等待资源加载.....')
// await page.evaluate(function(){
//     let timeLimit = 60 * 1000;
//     return new Promise((r,j)=>{
//         let isLoaded = true;
//         let start = +new Date();
//         let t = setInterval(function(){
//             $('img').get().forEach(t=>{
//                 var img = $(t).attr('src');
//                 var pimg = $(t).data('src');
//                 if(img.indexOf(pimg) > -1){
//                     isLoaded  = isLoaded && true;
//                 }else{
//                     isLoaded  = isLoaded && false;
//                 }
//             })
//             if(isLoaded || (+new Date()) - start > timeLimit){
//                 clearInterval(t);
//                 r();
//             }
//         },500);
//     })
// });


//pdf
console.log(`保存文章到PDF`)
await page.pdf({
    path : path.join(folder,name,title,title+'.pdf'),
    format  : 'A4',
    printBackground  : true
});

console.log(`关闭浏览器`);
await browser.close();

process.exit(0);

})(); 相对来说没有什么难度。不过也碰到了一个问题,资源懒加载的问题。

转载请注明出处: http://sdxlp.cn/article/weixingongzhonghao.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
近期有大量的iPhone13用户称自己遇到了iPhone出现粉屏的情况,并且是出现很多次的那种,询问客服之后也没有解决方法,所以很多用户想要知道iPhone13粉屏重启怎么办,下面就让点点给小伙伴们介绍一下。
随着科技的发展,QQ已经成为了大多数小伙伴们沟通联络的工具,有些图片会过期,是否可以恢复过期的图片呢?
随着网上购物的普及,咱们收发快递的次数也越来越频繁,而且收发快递一但堆积太多,总感觉乱糟糟的,不知道自己有多少快递需要收发。下面跟我来,一学就会,以后不会忘记收发快递啦。
QQ可能是很多小伙伴们的回忆,而照片就是小伙伴最简单的回忆方法,说到照片,大多数人都知道,有的小伙伴问QQ相册里的照片彻底删除了怎么找回来
日常生活工作中,智能手机已经成为必备,手机的耗电量也是比较大的,智能手机后台耗电量过大是很正常的现象,小编教小伙伴们几招,可以尽量的减少手机电量的过快消耗。
微信过节一定拍了不少照片、视频吧!小程序用上了么?内存够用么?16G还不是照样删删删,该怎样操作哪?跟点点来看一下吧!
生活中,小伙伴们肯定也遇到了这样的问题。点点给小伙伴们解惑来了。好多天没开电脑啦!正好用到电脑,刚打开就傻眼啦。结果开机进不了系统,蓝屏显示自动修复失败,立马选了启动修复,但可想而知不起作用。主要是不想花钱,嘻嘻。经过几天的折腾,终于,柳暗花明,进入系统。下面给点点分享这几天所查到并使用的方法,以及最后是用什么方法解决的。
日常生活中,我们可能会换手机,但手机号基本上是不会换的,那怎样把旧手机的微信聊天记录迁移到新的手机上。请看下边操作,让你快速上手。解决问题!