js实现爬取QQ群管理页面所有QQ群成员信息

js实现爬取QQ群管理页面所有QQ群成员信息

QQ群管理页面请求

在这里插入图片描述

如图所示,当进入该页面的时候,页面会发送四个请求,bkn参数是每次进入该页面时,自动生成的一个身份id,只要不关闭页面,就不会变,如果重新进入页面,该参数也会变.
1.第一个请求没用,不解释
2.get_group_list请求是拉取群组信息
在这里插入图片描述
3.get_friend_list请求是拉取好友信息,这里用不到
4.search_group_members请求是通过群号拉取成员信息
经测试发现,每次只能拉取少量成员,大概是不超过40个数据,如果超过,返回的就是错误代码,所以后续使用递归函数,反复拉取
在这里插入图片描述

代码

使用只需要每次将myId更换为进入页面的bkn数值,上面有说.(关闭页面重新进入后该参数会变,所以记得替换参数)
然后将代码直接复制到控制台回车,然后耐心等待即可
在这里插入图片描述

// An highlighted block
let start = 0;
        let end = 0
        let myId = '983285666' //特定id,每次进入页面会生成这个id,复制粘贴到这里就行
        let ResultList = new Array(); //用于存储最后要导出的数据
        let groupArr = new Array(); //存储所有群
        $.ajax({
            method: "post",
            async: false,
            url: "https://qun.qq.com/cgi-bin/qun_mgr/get_group_list",
            data: {
                "bkn": myId
            },
            success: function (res) {
                groupArr = res.create.concat(res.join) //res.create是自己创建的群.res.join是加入的群,合并到groupArr数组
                foo()
            },
        })

        function foo() {
            if (groupArr.length > 0) {
                $.ajax({
                    method: "post",
                    url: "https://qun.qq.com/cgi-bin/qun_mgr/search_group_members",
                    async: false,
                    data: {
                        "bkn": myId,
                        "gc": groupArr[0].gc, //群号
                        "st": start,
                        "end": end + 40, //每次请求40条是因为请求条数过大,返回的就是错误代码
                        "sort": "0",
                    },
                    success: function (res) {
                        end += 40;
                        start = end + 1
                        //存储结果到缓存
                        console.log(groupArr);
                        for (var i in res.mems) {
                            ResultList.push([
                                groupArr[0].gn, //群名称
                                groupArr[0].gc, //群号
                                res.mems[i].card, //人员群昵称
                                res.mems[i].uin, //人员QQ号
                                res.mems[i].nick //人员元昵称
                            ])
                        };
                        if (end >= res.count) {//res.count是群现有人数
                            // var title = "群名称,群号,人员群内昵称,人员QQ号,人员昵称";
                            // var downList = '\n' + ResultList.join('\n')
                            // var data = "\ufeff" + title + downList;

                            // const blob = new Blob([data], {
                            //     type: 'text/csv,charset=UTF-8'
                            // });
                            // const csvUrl = URL.createObjectURL(blob);
                            // let link = document.createElement('a');
                            // link.download = groupArr[0].gn +`.csv`; //文件名字
                            // link.href = csvUrl;
                            // link.click();
                            // ResultList = [];

                            //上面注释部分是每个群分别生成一个csv文件导出,如果想要单独导出,放开上面,隐藏下面else即可

                            start = 0;
                            end = 0;
                            groupArr.shift()
                        }
                        setTimeout(() => { //设置时间是因为请求过快,你会被限制进入该页面
                            foo();
                        }, 2 * 1000 + Math.random() * 500);

                    },
                })
            } else {
                //生成csv并下载,这里是吧所有群人员导入到一个csv文件,如果需要分别导出,隐藏这里,放开上面注释即可
                var title = "群名称,群号,人员群内昵称,人员QQ号,人员昵称";
                var downList = '\n' + ResultList.join('\n')
                var data = "\ufeff" + title + downList;

                const blob = new Blob([data], {
                    type: 'text/csv,charset=UTF-8'
                });
                const csvUrl = URL.createObjectURL(blob);
                let link = document.createElement('a');
                link.download = `所有群人员信息.csv`; //文件名字
                link.href = csvUrl;
                link.click();

                ResultList = [];
            }
        }

导出的效果

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值