想要了解如何从微信公众号文章中下载视频吗?市面上推荐的下载工具让人等得焦急。那么,这篇文章将为你详细介绍,从技术层面入手,如何获取并下载这些视频内容。
微信视频下载需求背景
现在,微信平台上充斥着各种引人入胜的视频内容,大家普遍有了保存下来的愿望。有的人是看中了教学视频,希望能够随时拿出来学习;还有的人则是被那些有趣的生活片段吸引,想要保留下来与他人分享。在知乎上,关于如何下载这些视频的问题引起了广泛的关注,许多人都在寻求简单高效的方法。然而,许多推荐的下载工具操作复杂,或者存在安全隐患。
基本手动下载法
若仅需下载某篇文章中的视频,步骤相当简便。首先,您需要复制该文章的链接,接着在谷歌浏览器中将其粘贴打开。找到视频后,在视频右下角点击全屏按钮。随后,再次点击右下角的三个点,就会出现下载选项,点击即可完成下载。对于诸如新闻类公众号发布的视频,这种方法同样适用,可以轻松实现下载。
F12查看法
您可以通过F12键查看视频标签或数据请求信息。在阅读公众号文章时,先按F12键,随后在出现的开发者工具中查找video标签,那里包含了视频的相关资料。若要查看数据请求,您可以找到视频的原始链接,进而下载视频。这种技巧适合对编程有一定认识的人,有助于分析视频的来源。
程序获取视频思路
在运用程序处理视频方面,我们已能完成诸如登录、签到等操作。尽管作者认为这些操作技术含量不高,但他仍旧坚持进行,以此为基础为后续研究做准备。接下来,作者打算研究如何搜集所有公众号的所有文章,这些数据将为大数据分析和内容整合提供必要的支持。
/**
* 小爬虫。
* 目标:
* 将微信公众号的视频下载下来,将文章保存PDF。
*
* 问题:如果等待资源文件全部加载完毕后,才打印PDF。
*
* 后续计划:
* 获取某公众号内所有的文章地址,并进行轮询获取所有视频/文章PDF。
* --微信。
*/
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);
![图片[1]-微信公众号文章里的视频怎么下载?教你用程序获取与下载-东山笔记](https://83ch.com/wp-content/themes/zibll/img/thumbnail-lg.svg)
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).scroll= $('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);
})();
代码编写情况
代码的编写与调试耗时未超过一小时。尽管开发过程并没有遇到太多难题,却遭遇了资源懒加载的困扰。代码需要完成识别公众号文章中的视频,并提取出下载链接的功能,同时在多种不同的文章环境中进行调试。不过,目前尚未找到有效的解决方案,因此暂时将这个问题放到了一边。
未来计划安排
打算抽出时间,将这款可以下载微信公众号视频的小工具开发成服务,并放置在我的博客工具栏中。随后,我会观察其使用情况,若用户反馈良好,我将继续对功能进行升级。目的是让更多有此需求的人,能够通过访问我的博客轻松获取到这个工具,满足他们下载公众号视频的愿望。
在下载公众号文章中的视频时,大家是否遇到了一些棘手的问题?欢迎点赞、转发这篇文章,并在评论区与我们分享你们的经历!