短视频一键采集下载源码开发思路第二篇

2024-06-21 18:12

本文主要是介绍短视频一键采集下载源码开发思路第二篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这次的文章主要已短信视频批量提取下载为基础只放出对应的解析源码

2.1:视频名称

2.2:视频作者

2.3:视频日期

2.4:视频下载地址

2.5:视频作者URL

2.6:评论人昵称

2.7:评论人首页URL

2.8:评论日期

2.9:评论内容

上面列出的就是在爬取视频时需要爬取的内容解析的内容

三:解析内容的源码
这段的源码只给出视频批量下载所用到的解析

 (注:不同的视频地址解析方法不一样,这里给出的是经过我们在使用过程中分析出来的,可以保持不用cookie 不会因为访问过快导致 IP屏蔽等)

这里给出需要解析的源码和对应的标签

3.1:视频名称 对应的解析标签和源码 这里使用的是 正则表达式

  string title_b = "";

            // 使用正则表达式提取 content 属性的值

            string pattern = @"<meta\s+name=""lark:url:video_title""\s+content=""([^""]+)""";

            Match match = Regex.Match(html, pattern);

            if (match.Success)

            {

                // 获取匹配到的 content 属性值

                string contentValue = match.Groups[1].Value;

                title_b = contentValue;

                if (title_b.Trim() == "dd-记录美好生活")

                {

                    title_b = "";

                }

                Console.WriteLine("Content Value: " + contentValue);

            }

            else

            {

                Console.WriteLine("No meta tag found or content attribute not present.");

            }

3.2:视频作者对应的标签和解析源码

  string zuozhe = "";

            string htmlContent = html;

            try

            {

                // string title = "";//获取title值 标题 视频名称

                Regex regex = new Regex(@"<span class=""j5WZzJdp y7epAOXf hVNC9qgC"">(.*?)</span>", RegexOptions.IgnoreCase);

                Match match = regex.Match(htmlContent);

                if (match.Success)

                {

                    // 获取匹配到的第一个组(即<title>和</title>之间的内容)

                    zuozhe = match.Groups[1].Value;

                    //发布时间:

                    zuozhe = zuozhe.Replace("<span>", "");

                    zuozhe = zuozhe.Replace("/", "");

                }

            }

            catch

            {

                //MessageBox.Show("608");

            }

            return zuozhe;

3.3:视频日期的标签和解析源码

因为视频时间 给的不是真正的日期 需要转换 这里进行了转换

 string shipin_dates = "";

            string htmlContent = html;

            try

            {

                // string title = "";//获取title值 标题 视频名称

                Regex regex = new Regex(@"<span class=""time"">(.*?)</span>", RegexOptions.IgnoreCase);

                Match match = regex.Match(htmlContent);

                if (match.Success)

                {

                    // 获取匹配到的第一个组(即<title>和</title>之间的内容)

                    shipin_dates = match.Groups[1].Value.Trim();

                    //发布时间:

                    shipin_dates = shipin_dates.Replace("<span>", "");

                    shipin_dates = shipin_dates.Replace("/", "");

                    shipin_dates = shipin_dates.Replace("·", "");

                    shipin_dates = shipin_dates.Replace("日", "");

                    shipin_dates = shipin_dates.Replace("年", "-");

                    shipin_dates = shipin_dates.Replace("月", "-");

                    string day = "";

                    // try

                    // {

                    Regex yearRegex = new Regex(@"\b\d{4}\b");

                    Regex dateRegex = new Regex(@"\b\d{1,2}-\d{1,2}\b");

                    // 判断字符串中是否包含年份信息

                    if (yearRegex.IsMatch(shipin_dates.Trim()))

                    {

                        // Console.WriteLine("输入字符串包含年份信息");

                    }

                    else if (dateRegex.IsMatch(shipin_dates.Trim()))

                    {

                        // Console.WriteLine("输入字符串不包含年份信息,但包含日期信息");

                        shipin_dates = "2024-" + shipin_dates.Trim();

                    }

                    else

                    {

                        Console.WriteLine("输入字符串既没有年份信息,也不符合日期格式");

                        #region

                        //DateTime shipin_dates_y = Convert.ToDateTime(shipin_dates);

                        //if (shipin_dates_y.Year != 1)

                        //{

                        //    shipin_dates = "2004-" + shipin_dates.Trim ();

                        //    Console.WriteLine("这个日期变量包含年份。");

                        //}

                        //else

                        //{

                        //    shipin_dates = "2004-" + shipin_dates.Trim ();

                        //    //Console.WriteLine("这个日期变量不包含年份。");

                        //}

                        #endregion

                        //  }

                        //  catch

                        // {

                        char delimiter = '·';

                        int index1 = shipin_dates.IndexOf(delimiter);

                        if (index1 != -1)

                        {

                            string textBeforeDelimiter = shipin_dates.Substring(0, index1);

                            shipin_dates = textBeforeDelimiter;

                            Console.WriteLine("Text before delimiter: " + textBeforeDelimiter);

                        }

                        if (shipin_dates.Contains("天"))

                        {

                            //  pinglun_riqi_yuanshi = extraInfo;

                            int index = shipin_dates.IndexOf("天");

                            day = shipin_dates.Substring(0, index);

                            DateTime dt = DateTime.Now.Date.AddDays(-Convert.ToInt32(Convert.ToInt32(day)));

                            shipin_dates = dt.ToShortDateString();

                        }

                        if (shipin_dates.Contains("月"))

                        {

                            //pinglun_riqi_yuanshi = extraInfo;

                            int index = shipin_dates.IndexOf("月");

                            day = shipin_dates.Substring(0, index);

                            DateTime dt = DateTime.Now.Date.AddMonths(-Convert.ToInt32(Convert.ToInt32(day)));

                            shipin_dates = dt.ToShortDateString();

                        }

                        if (shipin_dates.Contains("小时"))

                        {

                            // pinglun_riqi_yuanshi = extraInfo;

                            int index = shipin_dates.IndexOf("小时");

                            day = shipin_dates.Substring(0, index);

                            DateTime dt = DateTime.Now.Date.AddHours(-Convert.ToInt32(Convert.ToInt32(day)));

                            shipin_dates = dt.ToString();

                        }

                        if (shipin_dates.Contains("分钟"))

                        {

                            //pinglun_riqi_yuanshi = extraInfo;

                            int index = shipin_dates.IndexOf("分钟");

                            day = shipin_dates.Substring(0, index);

                            DateTime dt = DateTime.Now.Date.AddMinutes(-Convert.ToInt32(Convert.ToInt32(day)));

                            shipin_dates = dt.ToString();

                        }

                        if (shipin_dates.Contains("周"))

                        {

                            //  pinglun_riqi_yuanshi = extraInfo;

                            int index = shipin_dates.IndexOf("周");

                            day = shipin_dates.Substring(0, index);

                            int week = (Convert.ToInt32(day) * 7);

                            DateTime dt = DateTime.Now.Date.AddDays(-Convert.ToInt32(week));

                            shipin_dates = dt.ToShortDateString();

                        }

                        if (shipin_dates.Contains("年"))

                        {

                            //  pinglun_riqi_yuanshi = extraInfo;

                            int index = shipin_dates.IndexOf("年");

                            day = shipin_dates.Substring(0, index);

                            DateTime dt = DateTime.Now.AddYears(-Convert.ToInt32(Convert.ToInt32(day)));

                            shipin_dates = dt.ToShortDateString();

                        }

                        //判断当前时间是否和视频时间 是否大于

                        DateTime a = DateTime.Now; // 当前时间

                        DateTime b = DateTime.ParseExact(shipin_dates, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);// 视频时间,假设为 2022-05-27

                        TimeSpan interval = a - b; // 计算时间间隔

                        if (Math.Abs(interval.TotalDays) <= 730) // 判断时间间隔是否小于等于两年//这个里面的值  通过字段获取

                        {

                            Console.WriteLine("视频时间和当前时间在两年内");

                        }

                        else

                        {

                            Console.WriteLine("视频时间和当前时间不在两年内");

                        }

                    }

                }

            }

            catch

            {

                //MessageBox.Show("608");

            }

            return shipin_dates;

3.4:视频下载地址标签和源码

  public string mp4_ceng(string html)

        {

            string mp4_url = "";

            string input = html;

            string srcValue = GetSrcFromSourceTag(input);

            mp4_url = srcValue;

            return mp4_url;

        }

        static string GetSrcFromSourceTag(string input)

        {

            Regex regex = new Regex(@"<source[^>]+src\s*=\s*""([^""]+)""");

            Match match = regex.Match(input);

            if (match.Success)

            {

                return match.Groups[1].Value;

            }

            else

            {

                return null; // 或者抛出异常,视情况而定

            }

        }

四:软件功能  和实现逻辑

概述:此延伸出的工具是我们开发的一个单独的通过视频复制链接进行视频提取。

4.1:批量导入分享链接。可通过记事本文件一行一个存入记事本文件进行导入。导入后系统可通过已导入的数据进行解析和下载。

4.2:确认下载

导入分享链接后,点击下载进入下载

解析逻辑:1:获取到分享链接地址后 先解析里面的分享的url

2:获取到原始的分享url后在反响获得视频播放真实地址

3:获取到分享真实地址后截取里面的视频ID

4:然后通过ID拼接一个视频播放的层页面地址

5:拼接后开始访问此视频播放层地址 进行用上面的代码进行解析。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/baihua345/article/details/139845397

这篇关于短视频一键采集下载源码开发思路第二篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081961

相关文章

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

Android多线程下载见解

通过for循环开启N个线程,这是多线程,但每次循环都new一个线程肯定很耗内存的。那可以改用线程池来。 就以我个人对多线程下载的理解是开启一个线程后: 1.通过HttpUrlConnection对象获取要下载文件的总长度 2.通过RandomAccessFile流对象在本地创建一个跟远程文件长度一样大小的空文件。 3.通过文件总长度/线程个数=得到每个线程大概要下载的量(线程块大小)。

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

百度OCR识别结构结构化处理视频

https://edu.csdn.net/course/detail/10506

基于Java医院药品交易系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W+,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人  Java精品实战案例《600套》 2023-2025年最值得选择的Java毕业设计选题大全:1000个热

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里