C# 爬取 “抖音“ 短视频无水印解析下载(超详细) 网络蜘蛛

Posted 生产队的驴.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 爬取 “抖音“ 短视频无水印解析下载(超详细) 网络蜘蛛相关的知识,希望对你有一定的参考价值。

效果图:
界面:

前言:
观看一下抖音视频时,看见喜欢的想保存下来,但是又有一些烦人的水印,有一些还干脆不给保存,于是就有了本文章


接口:

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids= 重定向到视频id

解析

分析链接:

3.30 ZZz:/ 艾特世界上最可爱的女孩子来看这束浪漫的玫瑰云。%治愈系风景 https://v.douyin.com/RvBhSpf/ 複制此链接,答開Dou音搜索,直接觀kan视pin!

提取其中的超链接

https://v.douyin.com/RvBhSpf/

很明显这是一个短链接,必会重定向

然后到浏览器访问分析

浏览器重定向:

什么是重定向:
就是就是一个链接的跳转,

例:访问a a带你跳到了b
就是一个简单的跳转链接

到浏览器访问后发现重定向到了一个长链接 然后又重定向到了一个 短链接(https://www.douyin.com/)也就是 他的官网
显然这不是视频的地址

打开浏览器的开发者模式(F12) 然后重新打开

请求 URL: https://v.douyin.com/RvBhSpf/
请求方法: GET
状态代码: 302
远程地址:
183.61.241.231:443
引用站点策略: no-referrer-when-downgrade

可以看见状态码是 302 也就是链接被重定向过

重定向后链接:

这个才是视频的地址

https://www.iesdouyin.com/share/video/7037464280307879201/?region=CN&mid=6686486920349993735&u_code=0&did=MS4wLjABAAAA7VHXUN_GLEcQq9rPHBSE4KTW5OIytGIskoGOixzHi8C3gIXiWDdfthqbJKVfWB7v&iid=MS4wLjABAAAAuET8uthSOTT9S-qNNE1ymRKeemQk5yU9eINu1I9b-Uw&with_sec_did=1&titleType=title&timestamp=1639190176&utm_campaign=client_share&app=aweme&utm_medium=ios&tt_from=copy&utm_source=copy

访问还是会跳到 他的官网

浏览器切换为 手机模式

然后重新访问
发现链接不在跳转

获取无水印地址:

这里发现了一个 可以直接保存的 无水印链接

经过几个视频的分析 发现是不规则链接 …分析不了 可能是我技术原因(新手)…

于是加放弃了这个方法

这里发现了一个接口 访问后 里就有一个无水印的链接

直接访问链接

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=7037464280307879201


可以确定 里面包含了 视频作者的信息 和 使用的背景音乐 头像等…

但是数据 太乱了 使用JS解析
在线解析JS


一目了然
分析的数据:

作品信息:
发现 “item_list”: 里就是他的作品的信息

视频ID:

“aweme_id”:“7037464280307879201”,

视频文案:

“desc”:"艾特世界上最可爱的女孩子来看这束浪漫的玫瑰云。#治愈系风景 ",

还有其他信息等自行测试 …

无水印视频点地址:
发现这里是他的 背景音乐 打开就可以保存

这就是的无水印链接

这是视频封面链接


编写代码

重定向后地址:

 HttpWebRequest beg = (HttpWebRequest)WebRequest.Create(richTextBox1.Text);
                beg.Method = "GET";

                beg.AllowAutoRedirect = false;             
                WebResponse response = beg.GetResponse();
                string url = response.Headers["Location"];

重定向提取视频ID:
这就是视频的id 这个链接 就是短链接重定向后的

  int n = url.IndexOf("video/");
      url = url.Substring(n + 6, 19);

使用接口得到地址:
接口:

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids= 重定向到视频id

  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + url);
                request.Method = "GET";                       
                request.Timeout = 10000;
                request.AllowAutoRedirect = false;
              

                WebResponse begurl = (WebResponse)request.GetResponse();

                StreamReader reader = new StreamReader(begurl.GetResponseStream(), Encoding.UTF8);
                ss = reader.ReadToEnd();

分割视频地址:

ss = ss.Substring(ss.IndexOf("play_addr"), ss.Length - ss.IndexOf("play_addr"));

                ss = ss.Substring(0, ss.IndexOf("]"));
                ss = ss.Substring(ss.IndexOf("url_list"), ss.Length - ss.IndexOf("url_list"));

                ss = ss.Substring(ss.IndexOf("["), ss.Length - ss.IndexOf("["));
                ss = ss.Substring(2, ss.Length - 3);
                ss = ss.Replace("playwm", "play");

预览视频:

 DialogResult dr = MessageBox.Show("是否预览视频", "提示", MessageBoxButtons.OKCancel);
                if (dr == DialogResult.OK)
                
                    try
                    
                        Process.Start(ss);
                    
                    catch 
                        richTextBox1.Text = ss;
                        MessageBox.Show("调用浏览器失败,请手动查看");
                    
                    

保存视频:

try
            

                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Title = "请选择要保存的路径";
                sfd.InitialDirectory = @"C:\\Users\\SpringRain\\Desktop";
                sfd.Filter = "视频文件|*.mp4|视频文件|*.avi|所有文件|*.*";
                sfd.ShowDialog();
                //获得保存文件的路径
                string path = sfd.FileName;

                HttpWebRequest beg = (HttpWebRequest)WebRequest.Create(ss);
                HttpWebResponse fh = (HttpWebResponse)beg.GetResponse();
                FileStream file = new FileStream(sfd.FileName, FileMode.Create);
                fh.GetResponseStream().CopyTo(file);

            
            catch  

完整代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 抖音下载

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
        
            richTextBox1.Text = e.LinkText;
           
        
        string ss;
        private void button1_Click(object sender, EventArgs e)
        

            try
            
                HttpWebRequest beg = (HttpWebRequest)WebRequest.Create(richTextBox1.Text);
                beg.Method = "GET";

                beg.AllowAutoRedirect = false;
                beg.Headers.Add("Cookie:");
                beg.UserAgent = "ua";
                WebResponse response = beg.GetResponse();
                string url = response.Headers["Location"];

                int n = url.IndexOf("video/");
                url = url.Substring(n + 6, 19);

                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + url);
                request.Method = "GET";            
                request.Accept = "*/*";
                request.Timeout = 10000;
                request.AllowAutoRedirect = false;
                request.UserAgent = "ua";

                WebResponse begurl = (WebResponse)request.GetResponse();

                StreamReader reader = new StreamReader(begurl.GetResponseStream(), Encoding.UTF8);
                ss = reader.ReadToEnd();

                ss = ss.Substring(ss.IndexOf("play_addr"), ss.Length - ss.IndexOf("play_addr"));

                ss = ss.Substring(0, ss.IndexOf("]"));
                ss = ss.Substring(ss.IndexOf("url_list"), ss.Length - ss.IndexOf("url_list"));

                ss = ss.Substring(ss.IndexOf("["), ss.Length - ss.IndexOf("["));
                ss = ss.Substring(2, ss.Length - 3);
                ss = ss.Replace("playwm", "play");

                button2.Visible = true;
                DialogResult dr = MessageBox.Show("是否预览视频", "提示", MessageBoxButtons.OKCancel);
                if (dr == DialogResult.OK)
                
                    try
                    
                        Process.Start(ss);
                    
                    catch 
                        richTextBox1.Text = ss;
                        MessageBox.Show("调用浏览器失败,请手动查看");
                    
                    
                

              



            

            catch
            
                MessageBox.Show("检测网络,或链接是否正确,不包含中文");

            

        

        private void Form1_Load(object sender, EventArgs e)
        

        

        private void button2_Click(object sender, EventArgs e)
        
            try
            

                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Title = "请选择要保存的路径";
                sfd.InitialDirectory = @"C:\\Users\\SpringRain\\Desktop";
                sfd.Filter = "视频文件|*.mp4|视频文件|*.avi|所有文件|*.*";
                sfd.ShowDialog();
                //获得保存文件的路径
                string path = sfd.FileName;

                HttpWebRequest beg = (HttpWebRequest)WebRequest.Create(ss);
                HttpWebResponse fh = (HttpWebResponse)beg.GetResponse();
                FileStream file = new FileStream(sfd.FileName, FileMode.Create);
                fh.GetResponseStream().CopyTo(file);

            
            catch  

        
    

纯手打,点个赞呗~

以上是关于C# 爬取 “抖音“ 短视频无水印解析下载(超详细) 网络蜘蛛的主要内容,如果未能解决你的问题,请参考以下文章

C# 短视频 无水印解析 原视频下载(超详细)

C# “DY视频”无水印解析下载(超详细)

Android初学 抖音短视频无水印下载APP的实现

python爬取抖音短视频

短视频批量解析下载工具,批量下载抖音短视频,短视频去水印工具,去水印神器吧

短视频去水印在线解析-抖音,快手,小红书,tiktok,Twitter去水印在线解析