最近想把有道精品课快过期的课程视频弄下来,刚开始想着录屏,但是那个太麻烦了,长一点的视频要一直在那里录制,影响其他工作,刚开始想着获取视频连接,看能不能下载,结果发开发现403,应该是加密处理了,不让直接下载
头疼了一会儿,然后想着用迅雷下载一下试试看,结果真的能下载(后面发现,下载多了可能就下不了,但是开机重启又可以下载,没搞懂什么问题)
这个我目前只测试了购买的课程(在有效期内),获取所有视频的json文件,存到了excel里面,直接在json文件里面也可以下载,但是不方便直接看。视频链接是原画的链接,标清和高清的会在后面加上视频的大小;
json文件效果如图,
excel文件如图,内容按分类存进了不同的sheet,
我这里改了一下sheet的名称,因为名字里面不能含中英文的:
代码如下:
const fs = require('fs');
const axios = require('axios');
const xlsx = require('node-xlsx');
function writeXls(arr) {
let buffer = xlsx.build(arr);
fs.writeFileSync(config.xlsxPath, buffer, {"flag": "w"});
console.log(`${config.xlsxPath} write success`);
}
/**
* 获取请求数据写入文件
* @param config
*/
function saveDataToFile(config) {
// 设置请求头
axios.get(config.url, {
headers: {
"Referer": "http://live.youdao.com/live/index.html?courseId=9219&lesson=662230&liveId=fe12574e347f&groupId=4102",
"User-agent": "看不到看不到~",
"Cookie": "自己账号的cookie"
}
}).then((res) => {
let json = JSON.stringify(res.data);
// console.log(JSON.stringify(json));
fs.writeFileSync(config.filePath, json);
console.log('write success!');
}
).catch(function (err) {
console.log(err);
});
}
function getDataFromFile(config) {
// 读取文件
fs.readFile(config.filePath, {encoding: 'utf-8', flag: 'r'}, (err, data) => {
if (err) {
throw err;
}
let arr = [];
JSON.parse(data).data.forEach(function (item, index) {
const headers = ['标题', '视频链接', '总时长', '大小'];
let datas = [headers];
item.list.forEach(function (it) {
let url, size;
if (it.video) {
url = it.video.downloadUrl;
size = Math.floor(it.video.size / (1024 * 1024)) + 'm';
} else {
url = '无';
size = 0;
}
datas.push([it.title, url, it.subTitle, size]);
});
arr.push({
name: item.title.replace(':', '-'),
data: datas
});
});
writeXls(arr);
});
}
let config = {
// url打开视频页面,F12,查看network->xhr,可以看到获取所有课程的接口,请求的时候需要设置请求头
url: 'https://ke.youdao.com/course/live/lessons.json?courseId=9219&r=1543288776707',
filePath: 'data.json',
xlsxPath: 'data.xlsx'
};
saveDataToFile(config);
// 文件写入有点慢,就延迟了3s再转成excel的
setTimeout(() => {
getDataFromFile(config);
}, 3000);
标签:Node,视频,url,data,精品课,抓取,json,let,config From: https://blog.51cto.com/u_16159492/6481496