Node抓取有道精品课视频

最近想把有道精品课快过期的课程视频弄下来,刚开始想着录屏,但是那个太麻烦了,长一点的视频要一直在那里录制,影响其他工作,刚开始想着获取视频连接,看能不能下载,结果发开发现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": "_ntes_nnid=7e6d7ea7c177a5a038442e9e72bc42c8,1542788971699; OUTFOX_SEARCH_USER_ID_NCOO=604854485.1580547; OUTFOX_SEARCH_USER_ID=\"[email protected]\"; UM_distinctid=1674f23e7e3804-0ccab6e5716c8f-4313362-13c680-1674f23e7e4bda; DICT_SESS=v2|MRzjuxdy1qyOfkm6MOW0PLhHPykfUm0JS0LwuOLQ4RkEhfeLk4Jy0gyOMOGOLqBRTF0LYA0fpLRTzhHguOfUm0wLhHp4kfgK0; DICT_LOGIN=1||1544185640034"
        }
    }).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);

猜你喜欢

转载自blog.csdn.net/u014264373/article/details/84938129