吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4293|回复: 43
收起左侧

[其他原创] 油猴脚本获取douyin抓取抖音数据

  [复制链接]
TZ糖纸 发表于 2023-7-19 11:50
本帖最后由 TZ糖纸 于 2023-7-21 13:24 编辑

先上脚本
[JavaScript] 纯文本查看 复制代码
// ==UserScript==
// @name         抖音用户主页抓取
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.douyin.com/user/*
// @icon         https://lf1-cdn-tos.bytegoofy.com/goofy/ies/douyin_web/public/favicon.ico
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var isFirst = true;
    var aweme_list = [];
    var nickname = "";

    function extractDataFromScript() {
        var scriptTag = document.getElementById('RENDER_DATA');
        if (!scriptTag) return;

        var encodedContent = scriptTag.innerHTML;
        var decodedContent = decodeURIComponent(encodedContent);
        var json = JSON.parse(decodedContent);

        for (var prop in json) {
            if (json.hasOwnProperty(prop) && prop !== "_location" && prop !== "app") {
                var user = json[prop];
                nickname = user.user.user.nickname;
                var post = user.post;
                var data = post.data;
                aweme_list = aweme_list.concat(data);
            }
        }
    }

    function createButton() {
        const button = document.createElement('button');
        button.textContent = '点击我';
        button.style.position = 'fixed';
        button.style.right = '20px';
        button.style.bottom = '30%';
        button.addEventListener('click', buttonClick);
        document.body.appendChild(button);
    }

    function buttonClick() {
        console.log(aweme_list);
        const files = [];
        aweme_list.forEach((item) => {
            if (item.aweme_type === 0 || item.awemeType === 0 || item.aweme_type === 61 || item.awemeType === 61) {
                try {
                    files.push({ name: item.desc, url: item.video.play_addr.url_list[0] });
                } catch (error) {
                    files.push({ name: item.desc, url: item.video.playAddr[0].src });
                }
            } else if (item.aweme_type === 68 || item.awemeType === 68) {
                var urlList = item.images.map(img => {
                    try {
                        return img.url_list[0];
                    } catch (error) {
                        return img.urlList[0];
                    }
                });
                files.push({ name: item.desc, urlList: urlList });
            }
        });

        var data = { nickname: nickname, aweme_list: files };
        console.log(data);
    }

    function interceptResponse() {
        var originalSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function() {
            var self = this;
            this.onreadystatechange = function() {
                if (self.readyState === 4) {
                    if (self._url.indexOf("/aweme/v1/web/aweme/post") > -1) {
                        var json = JSON.parse(self.response);
                        var data = json.aweme_list;
                        aweme_list = aweme_list.concat(data);
                    }
                }
            };
            originalSend.apply(this, arguments);
        };
    }
    function scrollPageToBottom() {
        const SCROLL_DELAY = 1000; // Adjust the delay between each scroll action (in milliseconds)
        let scrollInterval;

        function getScrollPosition() {
            return window.scrollY || window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
        }

        function scrollToBottom() {
            window.scrollTo(0, document.body.scrollHeight);
        }

        function hasReachedBottom() {
            return getScrollPosition() >= (document.body.scrollHeight - window.innerHeight);
        }

        function scrollLoop() {
            if (!hasReachedBottom()) {
                scrollToBottom();
            } else {
                console.log("Reached the bottom of the page!");
                clearInterval(scrollInterval);
                // You can perform additional actions here after reaching the bottom of the page.
            }
        }

        function startScrolling() {
            scrollInterval = setInterval(scrollLoop, SCROLL_DELAY);
        }

        function createButton() {
            const button = document.createElement('button');
            button.textContent = '点击开始下拉';
            button.style.position = 'fixed';
            button.style.right = '20px';
            button.style.bottom = '35%';
            button.addEventListener('click', startScrolling);
            document.body.appendChild(button);
        }

        createButton();
    }

    // To start scrolling, call the function:
    scrollPageToBottom();


    if (isFirst) {
        console.log("首次加载");
        isFirst = false;
        setTimeout(function() {
            extractDataFromScript();
            createButton();
        }, 5000); // 延迟时间为5000毫秒(即5秒)
    }

    interceptResponse();

})();

重写XMLHttpRequest的Send函数达到拦截


注意!是用户主页!!!
注意!是用户主页!!!
注意!是用户主页!!!
重要的事情说三遍
比如https://www.douyin.com/user/MS4wLjABAAAAd4IEE9JOezbMuKOhRFAEAwlN3D5qgBDvTjjqV2g5FHM?is_search=0&list_name=follow&nt=0
半甜梦.的主页 - 抖音 (douyin.com),进去的话点点赞哈,我看这个女生还挺好看的


页面5秒钟后会在页面右下角生成一个按钮

1689738511586.jpg
点击后会在控制台打印数据
一个是原始数据,一个是经过处理的数据(标题+作品地址)
1689738558086.jpg



对应的下载器:https://gitee.com/tjfzeishuai/DouyinDownloader
C# 自行编译




觉得帖子还不错点点赞~

免费评分

参与人数 9吾爱币 +13 热心值 +8 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
疯兔neo + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
52pojie666z + 1 + 1 热心回复!
cmj5920 + 1 用心讨论,共获提升!
yanglinman + 1 谢谢@Thanks!
塞北的雪 + 1 + 1 666,一直不知道怎么能拦截XHR请求,LZ的帖子打开了新思路
鸣蜩十四 + 1 + 1 我很赞同!
lcymzzZ + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

文辉 发表于 2023-7-19 14:36
刚刚测试了一下,可以取到视频列表的ID和链接
ColdridgeValley 发表于 2024-2-17 21:31
过了那么久了,居然还能用。说没用的估计都没有试过,对于一个开发来说这个JSON里信息可是真的多。。。
Pwaerm 发表于 2023-7-19 12:21
7206 发表于 2023-7-19 12:28
看不懂,这个能查到什么
lee321 发表于 2023-7-19 12:43
不明觉厉!
Zz147258369 发表于 2023-7-19 12:54
不懂,怎么玩
blueboys 发表于 2023-7-19 13:04
厉害,一般人不过用不到
sensea 发表于 2023-7-19 13:07
不明觉厉
水里水汽小小虫 发表于 2023-7-19 13:18
这个抓取的是帖子里评论还是帖子的主题啊?
s98 发表于 2023-7-19 13:36
感谢分享了
dennyyang 发表于 2023-7-19 13:43
感觉这个有点意思的哈
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-28 02:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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