记录一下爬取微信小程序视频的过程!

一个老年朋友在微信小程序中学习弹钢琴,昨天他告诉我,他喜欢的一个老师即将下线,以后看不到他的视频,希望我能下载保存。好的我试试吧!

1、打开小程序,一看是个直播的,不过可以回放。嗯,先弄到电脑上打开抓包分析一下。微信PC版登起,点开小程序.......没反映,打不开,百度,结果就是部分小程序不支持PC端打开,好另外想办法。

2、突然想起我的iKuai软路由可以抓包,好的开始,进入路由开始对手机的IP进行抓包,然后用wireshark分析抓到包,好顺利得到m3u8的播放列表。打开列表一看,20秒一段,1分钟一个ts文件

2644716208_1968568419_1.ts?start=0&end=372427&type=mpegts&resolution=544x960
#EXT-X-PROGRAM-DATE-TIME:2020-09-28T10:27:04+08:00
#EXTINF:2.025,
2644716208_1968568419_1.ts?start=372428&end=756135&type=mpegts&resolution=544x960
#EXT-X-PROGRAM-DATE-TIME:2020-09-28T10:27:06+08:00
#EXTINF:2.007,
2644716208_1968568419_1.ts?start=756136&end=1117283&type=mpegts&resolution=544x960
#EXT-X-PROGRAM-DATE-TIME:2020-09-28T10:27:08+08:00
#EXTINF:2.025,
2644716208_1968568419_1.ts?start=1117284&end=1482567&type=mpegts&resolution=544x960
#EXT-X-PROGRAM-DATE-TIME:2020-09-28T10:27:10+08:00
#EXTINF:2.018,

  解析出来的下载连接重复名很多,打开VS,用C#筛选吧!直接WinFrom简单

  private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();

            fileDialog.InitialDirectory = "C:\";    //打开对话框后的初始目录
            fileDialog.Filter = "文本文件|*.m3u8|所有文件|*.*";
            fileDialog.RestoreDirectory = false;    //若为false,则打开对话框后为上次的目录。若为true,则为初始目录
            if (fileDialog.ShowDialog() == DialogResult.OK)
                label1.Text = System.IO.Path.GetFullPath(fileDialog.FileName);//将选中的文件的路径传递给TextBox “FilePath”

        }

        private void button2_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            List<string> vok = new List<string>();
            if (label1.Text == null || label1.Text == "")
            {
                MessageBox.Show("请先选择m3u8播放列表文件");
            }
            if (textBox1.Text == null || textBox1.Text == "")
            {
                MessageBox.Show("请输入http连接");
            }
            else
            {
                foreach (string str in System.IO.File.ReadAllLines(label1.Text, Encoding.Default))
                {
                    if (str.Contains("?start"))
                    {
                        //删除?start后所有字符串(菜鸟级别)
                        string str2 = Regex.Unescape(str);
                        int index = str2.IndexOf("?start");
                        str2 = str2.Remove(index);
                        //richTextBox1.Text = richTextBox1.Text + "
" + str2;
                        string str3 = str2 + "
";
                        vok.Add(str2);
                    }
                }
            }
            HashSet<string> hs = new HashSet<string>(vok); //此时已经去掉重复的数据保存在hashset中

            foreach (string item in hs)
            {

                richTextBox1.Text =@"http://"+textBox1.Text+ item.ToString() + "
" + richTextBox1.Text;
            }
        }

  3、拿到所有TS文件真实下载地址,导入迅雷开始下载。

4、百度找到一个ReNamer软件可以批量改名,支持关键字前后删除,正合适,去掉文件名无用字符串,只保留顺序字符。

5、百度找到一个“ts合并工具",软件很小,很方便。

自此大功告成。

原文地址:https://www.cnblogs.com/kismet82/p/14124763.html