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 {
    
     }

        }
    }
}

纯手打,点个赞呗~

猜你喜欢

转载自blog.csdn.net/dpc5201314/article/details/121869717