吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2550|回复: 15
收起左侧

[其他原创] 《使用C#+Selenium+FiddlerCore 抓取douyin》

  [复制链接]
TZ糖纸 发表于 2023-7-12 12:05
FiddlerCore 包
[Asm] 纯文本查看 复制代码
NuGet\Install-Package FiddlerCore -Version 4.6.2

其他看图安装包
image.png

上代码
[C#] 纯文本查看 复制代码
 public class douyin
    {
        public static void start()
        {
            FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete;
            FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
            FiddlerApplication.Startup(8888, true, true, true);
            remove();
            install();


            // 创建代{过}{滤}理对象
            Proxy proxy = new Proxy();

            // 设置代{过}{滤}理服务器地址和端口
            proxy.HttpProxy = "127.0.0.1:8888";
            proxy.SslProxy = "127.0.0.1:8888";


            ChromeOptions options = new ChromeOptions();
            // 将代{过}{滤}理对象附加到 ChromeOptions
            options.Proxy = proxy;


            // 创建Edge浏览器的WebDriver实例
            IWebDriver driver = new ChromeDriver(options);

            // 导航到52pojie网站
            driver.Navigate().GoToUrl("用户的主页");


            // 等待用户输入并保持程序运行
            Console.WriteLine("按下任意键停止...");
            Console.ReadLine();
            // 关闭浏览器
            driver.Quit();
            // 停止 FiddlerCore
            FiddlerApplication.Shutdown();
        }

        private static void FiddlerApplication_BeforeRequest(Session oSession)
        {
            if (oSession.url.StartsWith("www.douyin.com/aweme/v1/web/aweme"))
            {
                // 移除"Accept-Encoding"请求头
                if (oSession.oRequest.headers.Exists("Accept-Encoding"))
                {
                    oSession.oRequest.headers.Remove("Accept-Encoding");
                }
            }
        }

        static string tmp = "-------------------------------------";
        private static void FiddlerApplication_AfterSessionComplete(Session oSession)

        {
            if (oSession.RequestMethod == "POST" || oSession.RequestMethod == "GET")
            {
                if (oSession.url.Contains("www.douyin.com/aweme/v1/web/aweme"))
                {

                    byte[] responseBodyBytes = oSession.responseBodyBytes;


                    // 转换解压后的字节数组为字符串
                    string responseBodyString = Encoding.UTF8.GetString(responseBodyBytes);

                    var json = JObject.Parse(responseBodyString);
                    var videoList = json["aweme_list"];
                    foreach (var video in videoList)
                    {
                        var preview_title = video["preview_title"];
                        var play_addr = video["video"]["play_addr"]["url_list"][0];
                        Console.WriteLine(preview_title);
                        Console.WriteLine(play_addr);
                    }

                }
            }
        }

        public static void install()
        {
            if (!CertMaker.rootCertExists())
            {
                CertMaker.createRootCert();
                CertMaker.trustRootCert();
            }
        }



        public static void remove()
        {
            if (CertMaker.rootCertExists())
            {
                CertMaker.removeFiddlerGeneratedCerts();
            }
        }
    }


代码解释
[C#] 纯文本查看 复制代码
private static void FiddlerApplication_BeforeRequest(Session oSession)
        {
            if (oSession.url.StartsWith("www.douyin.com/aweme/v1/web/aweme"))
            {
                // 移除"Accept-Encoding"请求头
                if (oSession.oRequest.headers.Exists("Accept-Encoding"))
                {
                    oSession.oRequest.headers.Remove("Accept-Encoding");
                }
            }
        }

这段代码是因为douyin在使用http传输时使用了br压缩方式,所以这里移除请求头,干掉br压缩

[C#] 纯文本查看 复制代码
private static void FiddlerApplication_AfterSessionComplete(Session oSession)

        {
            if (oSession.RequestMethod == "POST" || oSession.RequestMethod == "GET")
            {
                if (oSession.url.Contains("www.douyin.com/aweme/v1/web/aweme"))
                {

                    byte[] responseBodyBytes = oSession.responseBodyBytes;


                    // 转换解压后的字节数组为字符串
                    string responseBodyString = Encoding.UTF8.GetString(responseBodyBytes);

                    var json = JObject.Parse(responseBodyString);
                    var videoList = json["aweme_list"];
                    foreach (var video in videoList)
                    {
                        var preview_title = video["preview_title"];
                        var play_addr = video["video"]["play_addr"]["url_list"][0];
                        Console.WriteLine(preview_title);
                        Console.WriteLine(play_addr);
                    }

                }
            }
        }

拦截对应的请求
前边干掉了br压缩,这里我们直接对byte[]转string进行json解析
最终效果图
1689134645251.jpg
1689134645222.jpg
因为是通过接口拿到的数据,这里随便怎么输出,我这里只把作品标题还有视频链接输出

免费评分

参与人数 5吾爱币 +10 热心值 +5 收起 理由
Vulpine + 1 + 1 谢谢@Thanks!
gqdsc + 1 + 1 这个厉害,感谢
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
fengzw + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
asdashu + 1 + 1 感谢分享C#爬虫相关的教程,还有感谢上次那个给我分享C#爬虫书籍的小伙伴

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

YokingChi 发表于 2023-10-23 19:36
本帖最后由 YokingChi 于 2023-10-23 19:41 编辑

xpj4186 发表于 2023-10-22 11:20
FiddlerCore包在哪里下载?好像下架了?在包管理器搜索不到啊

程序包管理器控制台,在里面打命令安装:
NuGet\Install-Package FiddlerCore -Version 4.6.2
找不到控制台的话点击  视图(View) -> 其他窗口(OtherWindow) -> 程序包管理器控制台 (Package Manager Console)
henry307 发表于 2023-7-12 13:21
wfghim 发表于 2023-7-12 13:32
mrchi 发表于 2023-7-12 13:39
才知道抖音还有网页版,学习了
wkfy 发表于 2023-7-12 13:47
我想学习一下抖音的小程序怎么抓。发现是网页版没小程序。
AHDylan 发表于 2023-7-12 17:04
大佬,多发布点C#的爬虫技术
guohuanxian 发表于 2023-7-12 17:36
抓取得抖音,有抓取直播流的吗?方法怎么做那
 楼主| TZ糖纸 发表于 2023-7-12 19:53
guohuanxian 发表于 2023-7-12 17:36
抓取得抖音,有抓取直播流的吗?方法怎么做那

抓直播流后边可以试试
xixicoco 发表于 2023-7-13 04:24
这个方法比较独特啊
 楼主| TZ糖纸 发表于 2023-7-13 13:11
xixicoco 发表于 2023-7-13 04:24
这个方法比较独特啊

这个方法,只要是通过浏览器的 都能抓
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表