首页 > 编程语言 >短视频评论截流源码开发思路C#

短视频评论截流源码开发思路C#

时间:2024-06-11 22:30:44浏览次数:13  
标签:视频 dates string C# DateTime shipin 源码 评论 截流

源码图镇帖

一:准备工作

这里我们采用了云技术,并不是通过客户端进行评论数据提取

1.1:UI自动操作技术

UI自动操作技术,顾名思义就是无需人工干预通过代码的方式让软件进行模拟人工操作,认为是脚本也好 什么都可以。这和脚本还不一样,这里就不细说了。

为什么获取短视频评论需要自动操作技术:那是因为短视频的评论在不被用户去看的情况下是不加载的,当需要去看某个视频评论的时候去点击了评论的图标按钮才会加载评论,在没有加载评论以前获取的代码字符是无法获取到评论内容的。所有需要点击一下评论图标按钮,点击后评论会被加载即可获取。

短信视频评论截取软件 需要UI自动化操作的有两块 

第一块:每获取到一个视频 在页面加载完毕后点击视频评论按钮,(这里只能点一次,所以需要逻辑上的处理)

第二块:下拉评论列表层,因为下拉评论列表才能获得所有的相关评论。

下面是点击层的代码和下拉层的代码 (这里前提是已经加载完毕页面,已经获取到页面代码时进行操作)

点击层的实例代码 V:y8834-cn

  chromeBrowser2.ExecuteScriptAsync(@"
                    var divElement = document.querySelector('div.kT7icnwc');
                    if (divElement) {
                        divElement.click();
                    }
                ");

下面代码是 douyin视频层需要 下拉评论层的代码

 chromeBrowser2.ExecuteScriptAsync(@"
                    var commentList = document.querySelector('div[data-e2e=""comment-list""]');
                    if (commentList) {
                        commentList.scrollTop = commentList.scrollHeight;
                    }
                ");

1.2:字符串函数和正则表达式

这里建议会熟练使用正则表达式的使用正则表达式 正则表达式有一个坏处就是 当字符有细节的变

动的情况下会卡住导致无法继续执行后面的代码 (有一些不可预知的问题)

如果用字符串函数 不会卡住 但是逻辑上会麻烦一些 但是不会卡 处理起来比较麻烦

1.3:爬取页面分析

先分析出需要爬取数据的页面的对应标签。

需要分析的有,视频作者标签,视频日期标签,评论列表标签,评论UI自动下滑标签,视频评论点

击显示评论标签。先分析出这些标签 才考虑如何进行解析,可用到字符串函数和正则表达式来获

取。

这里放出一部分 解析作者标签的代码 和视频基础信息的代码 用的是正则表达式加字符串函数

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_name = match.Groups[1].Value;
                    //发布时间:
                    zuozhe_name = zuozhe_name.Replace("<span>", "");
                    zuozhe_name = zuozhe_name.Replace("/", "");

                }
            }
            catch
            {
                //MessageBox.Show("608");
            }

 private void zuozhe_url_ceng(string html)
        {
            string htmlContent = html;
            string pattern = "<div class=\"uUjpLYc2 k13DwHsB O1xRgMXN\">.*?href=\"([^\"]+)\"";
            Regex regex = new Regex(pattern);

            Match match = regex.Match(html);
            if (match.Success)
            {
                string href = match.Groups[1].Value;
                zuozhe_url = href;
            }
        }

   private void shipin_dates_ceng(string html)
        {
            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");
            }
        }

        private void title_ceng(string html)
        {
            // string pattern = @"<span class=""j5WZzJdp IoRNNcMW hVNC9qgC"">(.*?)</span>";
            // MatchCollection matches = Regex.Matches(html, pattern);

            // // 提取匹配结果

            // //foreach (Match match in matches)
            // //{
            //     title = matches.Groups[1].Value.Trim();
            //     // 输出匹配到的内容
            //   //  Console.WriteLine(match.Groups[1].Value.Trim());
            }
            ///
            string htmlContent = html;
            try
            {
                // string title = "";//获取title值 标题 视频名称
                Regex regex = new Regex(@"<span class=""j5WZzJdp IoRNNcMW hVNC9qgC"">(.*?)</span>", RegexOptions.IgnoreCase);
                Match match = regex.Match(htmlContent);
                if (match.Success)
                {
                    // 获取匹配到的第一个组(即<title>和</title>之间的内容)
                    title = match.Groups[1].Value;
                    //发布时间:
                    title = title.Replace("<span>", "");
                    title = title.Replace("/", "");

                }
            }
            catch
            {
                //MessageBox.Show("608");
            }
        }

1.4:短视频评论的会话和COOKIE的处理

二:功能模块列表

关键词任务

通过关键词进行搜索行业视频,通过行业视频提取到相关所需要的评论内容

博主任务

只搜索抖音博主的视频评论,并且支持监控新视频和对应视频评论。(无需开启电脑和软件只要建立任务即可。)

单视频任务

只提取和监控单个视频的评论。并且支持支持实时监控。

监控

关于监控,监控只能在博主任务和视频任务中进行监控。 监控时打开软件和不打开软件都可以获取新的评论数据。

详情和二维码

查看对应评论的详细数据,里面有二维码,评论人,评论视频,评论人首页,评论内容,命中评论词

我们还做了一个监控报表方便数据监控 不过这个是网页版本BS版本

标签:视频,dates,string,C#,DateTime,shipin,源码,评论,截流
From: https://blog.csdn.net/2401_85233051/article/details/139533977

相关文章

  • 行行比较,高逼格的SQL写法!【送源码】
    环境准备数据库版本:MySQL5.7.20-log建表SQLDROPTABLEIFEXISTS`t_ware_sale_statistics`;CREATETABLE`t_ware_sale_statistics`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键id',`business_id`bigint(20)NOTNULLCOMMENT'业务机构编码',......
  • 知识普及:什么是边缘计算(Edge Computing)?
            边缘计算是一种分布式计算架构,它将数据处理、存储和服务功能移近数据产生的边缘位置,即接近数据源和用户的位置,而不是依赖中心化的数据中心或云计算平台。边缘计算的核心思想是在靠近终端设备的位置进行数据处理,以降低延迟、减少带宽需求、提升数据隐私和增强......
  • WPF中读取Excel文件的内容
    演示效果实现方案1.首先导入需要的Dll(这部分可能需要你自己搜一下)Epplus.dllExcel.dllICSharpCode.SharpZipLib.dll2.在你的解决方案的的依赖项->添加引用->浏览->选择1中的这几个Dll点击确定。(添加依赖)3.然后看代码内容附上源码usingExcel;usingSystem.Dat......
  • [FAQ] vscode 装了 vim 之后,ctrl+p 不起作用?
     #进入设置(左下角setting)-->vim.handleKeys-->在settings.json中编辑,把需要禁用Vim的热键以json格式写入vim.handleKeys中即可,如:"vim.handleKeys":{"<C-a>":false,"<C-c>":false,"<C-x>":false,&......
  • Centos7.9使用kubeadm部署K8S单机环境
    Centos7.9使用kubeadm部署K8S单机环境使用kubeadm部署一个k8s单机环境1.环境信息操作系统:CentOS7.9.2009内存:4GBCPU:2网络:能够互访,能够访问互联网hostnameip备注k8s192.168.0.159master+worker2.准备工作在所有节点(包括Master和Worker节......
  • 温泉镇旅游微信小程序的设计与实现(论文+源码)_kaic
    摘要旅游业随着经济的快速发展呈现出一派欣欣向荣的景象,尤其是近两年来,各个行业运用科技以及因特网来促进旅游迅速发展,逐渐都显示出了的问题,特别突出的是在线上推广,其缺点也是特别明显。尽管在新冠肺炎的冲击下,许多重要的旅游胜地和娱乐场所都被关闭,但是我认为,在未来,我国会在......
  • JDBC学习记录
    目录1.JDBC概述1.1JDBC是什么?1.2JDBC的本质是什么?1.3为什么要使用JDBC?2.JDBC快速入门2.1JDBC编程步骤2.2具体操作2.3完整实例3.常用API3.1DriverManager3.2Connection3.2.1获取执行对象3.2.2事务管理3.3Statement3.4ResultSet3.5PreparedStatement3.5.1......
  • FlinkSQL 运行官网的 filesystem SQL 连接器例子出错:Cannot discover a connector usi
    我的例子程序是仿照官网例子写的:我的程序:packagecom.xxx.demo;importorg.apache.flink.streaming.api.datastream.DataStream;importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;importorg.apache.flink.table.api.bridge.java.StreamTabl......
  • http与cJSON练习
    http与cJSON练习/*****************************************************************************************************weather_test.c*练习tcp连接,与http协议,调用服务器接口,实现获取特定城市的天气信息,并用cJSO......
  • 使用 Flink SQL 读取本地csv文件(Java实现)
    data.csv内容:1,Tom,152,Lily,133,Mike,214,John,205,Emma,186,Sophia,197,David,228,James,169,Olivia,1710,Robert,2311,Emily,1412,Daniel,2513,Amelia,24代码:packagecom.auguigu.demo;importorg.apache.flink.streaming.api.datastream.DataStream;impo......