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

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

点点

2021-03-30 20:31 阅读 891 喜欢 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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
荣耀手机是国内手机比较大的一个厂商,拥有众多的用户,并且在持续的推出各种新品,面对与时俱进的手机设置,很多用户想要知道荣耀手机微信怎么设置密码锁屏,那么下面就让点点给小伙伴们介绍一下设置方式。
现在手机版微信软件有很多小伙伴们在使用,用来聊天,支付等,有的小伙伴在使用该软件时,想要赠送亲属卡给他人,来支付他人的支出,但是却不知道如何赠送,那么小编就来为小伙伴们介绍一下吧。
在日常生活中经常会用到电脑,使用电脑访问网页的过程中,小伙伴们可能会收到一个“404 not found”提醒,那么这是什么意思呢?出现这个问题的原因是什么?该如何解决哪?
日常生活中,免不了要换新手机,但是不想把数据留在旧手机中,如何解决?智能手机现在就是两种系统,安卓系统与苹果系统,今天说一下苹果系统的数据传输,跟小编来看一下吧!
我们在平常的工作与学习时,会经常使用到wps软件来编辑文档或者表格,但有时也会碰到一些问题,如程序无响应,电脑死机等等,这时就只能重启解决,可假如这时文档还没有保存,编辑的内容就全没了,要怎么办才好?
在智能化的时代,微信是我们日常生活与工作中必不可少的软件,微信是一款社交聊天软件,有很多的小伙伴们在使用的过程中比较好奇微信上如何登陆QQ呢
在互联网的大时代,咱们都没有任何的隐私可言,我们在正规的网站浏览网页,过几个小时就会有客服给咱们打电话,各大平台也是给咱们推荐我们所浏览的东西。不买会一直给推荐,关掉个性设置,广告等还是会推荐。直到你购买,方才作罢。
在使用抖音时,可能会与很多人的进行聊天,时间久了聊天记录自然也会变得庞大,这时想要找到特定的聊天内容可能会有些困难。为了更高效地管理和回顾聊天记录,下面是如何在抖音中搜索并定位特定私信聊天内容的方法。