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

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

点点

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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
智能手机已经很普遍了,苹果手机是国内很多人的主流手机,因为拥有强悍的手机性能,还有流畅的使用体验,拥有一大批的果粉,但是很多用户都是第一次使用,所以想要知道苹果手机录屏功能在哪里?
智能手机现在人手一台,手机QQ是现在最常用的社交、办公软件之一,有些小伙伴们想知道手机QQ怎么查找历史文件,接下来小编就给小伙伴们介绍一下具体的操作步骤。
面对QQ的改变,小伙伴是会转战QQ哪?还是留在微信阵地哪?
公司报销的时候虽然已经有了电子发票,但是贴票还是需要将发票打印出来贴上,如果只有一两张也就算了,如果几十张.. 找了好多工具、在线版本都不合心意,做个自己喜欢的吧。
微信过节一定拍了不少照片、视频吧!小程序用上了么?内存够用么?16G还不是照样删删删,该怎样操作哪?跟点点来看一下吧!
小伙伴们在很多的特殊节日里,手机微信的红包限额将会进行修改,例如一些情人节、七夕等情侣之间过的节日,微信红包限额都会由200改成520,小伙伴们可以直接发出一个520红包,下面就和小编一起来看看吧!
我们现在经常会使用微信传输文档,那么有时候我们需要将其在电脑中存储起来,今天小编跟小伙伴们分享的是如何将电脑端微信中的文档批量下载下来。
微信发现页面的游戏功能,时不时就会出现游戏消息提醒,非常影响使用体验,在哪里关闭微信游戏消息提醒呢,怎么屏蔽微信游戏消息,下面就和点点一起来看看吧!希望可以和小伙伴们一起提高生活质量。