使用node脚本全自动删除豆瓣评论与帖子

前情提要

最近由于转租房子的事情,搞得很疲惫,前期没考虑好就换了新的住处,导致需要自己转租以前的房子,不然房东不退押金啊;怎么办,转租呗,抄起家伙就是干,以前用过豆瓣小组转过房子,这次也是一样(我不是做广告的,别打我!),拼命发帖,拼命自己顶帖啊,加了一二十个小组,发了一二十个贴子,本来想写个脚本定时顶帖呢,可无奈还需要搞验证码,工作事情多,没时间做了,全自动顶帖的就人工代替了,偶尔一两个小时顶一次;

前两天刚转租出去,本来想去豆瓣把帖子删了,因为帖子中有太多的个人信息,一个一个清空太麻烦。无奈看了一遍没有删帖的地方,后来才知道原来豆瓣删帖必须是没有评论的帖子才可以删除,我看了一下我的帖子,瞬间石化,我自己的回复都已经有上百条了,一个一个删要到什么时候啊;本能的我开始研究豆瓣删除评论的接口调用规律,发现了规律后就撸起袖子干;

豆瓣接口

由于豆瓣中的一些相关操作都是需要认证的,所以我们需要提前用浏览器登录进行操作,取到Cookie 和一个ck值,ck值具体什么作用不是很清楚,不过大部分的操作都需要这个参数,这个参数的值基本没有变化,很容易找到,最好删帖前自己操作一下删除评论就可以获取到ck值,cid值就是评论的编号值,后续代码中有介绍相关参数获取方式;



技术选型

以前做过node爬虫工具,这次也一样,不过这个相对更简单点,只有两个依赖包,一个是

superagent 一个是 cheerio,这两个是爬虫工具经常使用的,我就不详细介绍了,不知道的可以去搜索看一下介绍;

主要代码

思路:

主要的代码内容很简单,主要就是先获取个人发帖列表,然后模拟访问所有的帖子列表,获得每个帖子的html文本,接着去爬取每篇帖子的评论id号,获取到id号后就进行删帖操作;

注意事项

这里值得注意的是,当执行完删除评论以后,你会发现还存在一部分评论,因为对于自己的评论是可以直接调用接口删除的,但是对于别人的评论,需要调用另外一个接口才能删除,并且需要填写删除原因,所以第一步操作是删除自己所有的评论,然后第二步是删除其他人所有的评论;最后一步才是删除所有帖子;

目录结构

就是最简单的目录结构,直接在一个项目文件夹中执行npm init 

然后创建一个douSpider.js文件,npm 安装 superagent 和 cheerio


代码

douSpider.js

//豆瓣删帖
var superagent = require('superagent');//引入superagent 插件
var cheerio = require('cheerio');//引入cheerio

//Cookie
var Cookie='填写你的Cookie值';
//host
var host ='www.douban.com';
//Origin
var Origin ='https://www.douban.com';
//Referer
var Referer = 'https://www.douban.com/group/';
//参数ck
var ck ='填写你的ck值';

//获取个人帖子列表
getTopic =function () {
    //这里需要注意的是需要点击到小组,你发布的列表
    var url = 'https://www.douban.com/group/people/1732*****(填入自己的url)/publish';
    superagent
        .get(url)
        .set('Cookie',Cookie)
        .set('Host',host)
        .set('Referer',Referer)
        .end(function (err,res) {
            if(err){
                return err
            }
            var $=cheerio.load(res.text);
         var urlList=[];
         $('.title a').each(function (index,element) {
            var $element = $(element);
            var href =$element.attr('href');
            var href_item = href.split('/');
            urlList.push(href_item[5]);
         });
         for(var i =0;i<urlList.length;i++){
             console.log('正在处理第'+i+'帖子');
             spider(urlList[i]);
             // 第三执行删帖操作
            //removeTopic(urlList[i]);
            }
      })
};
//获取指定帖子的cid
spider = function (topic) {
    var url = 'https://www.douban.com/group/topic/'+topic+'/';
    superagent
        .get(url)
        //请求结束后的操作
        .end(function (err, res) {
            if (err) {
                console.log(err);
                return err;
            }
            //解析请求后得到的body数据
            var $=cheerio.load(res.text);
            var cid=[];
            $('#comments li').each(function (index,element) {
                var $element = $(element);
                cid.push($element.attr('data-cid'));
         });
            for(let i=0;i<cid.length;i++){
               console.log('正在删除第'+topic+'帖子的第'+i+'条评论');
            // 第一次执行删除自己的回复
             removeComment(topic,cid[i]);

                //  第二次执行删除其他人的回复
            // removeOtherComment(topic,cid[i]);
            }
        });
};
//删除帖子
removeTopic =function (topic) {
    var url3='https://www.douban.com/group/topic/'+topic+'/remove?ck='+ck;
   superagent
      .get(url3)
      .set('Cookie',Cookie)
      .set('Host',host)
      .set('Referer',Referer+'topic/'+topic+'/')
      .end(function (err,res) {
         if(err){
            console.log(err);
            return err
         }
         console.log('成功删帖');
      })
};
//删除其他人评论
removeOtherComment=function (topic,cid) {
    var url2 ='https://www.douban.com/group/topic/'+topic+'/remove_comment?cid='+cid;
   superagent
      .post(url2)
      .send({'cid':cid,'ck':ck,'reason':'other_reason','submit':'确定'})
      .set('Cookie',Cookie)
      .set('Host',host)
      .set('Origin',Origin)
      .set('Content-Type','application/x-www-form-urlencoded')
      .set('Referer',Referer+'topic/'+topic+'/remove_comment?cid='+cid)
      .end(function (err,res) {
         if(err){
            console.log(err);
            return err
         }
         console.log('成功删除');
      })
};
//删除自己评论
removeComment =function (topic,cid) {
    var url1 = 'https://www.douban.com/j/group/topic/'+topic+'/remove_comment'; //移除评论接口
    superagent
        .post(url1)
      .send({'cid':cid,'ck':ck})
        .set('Cookie',Cookie)
        .set('Host',host)
        .set('Origin',Origin)
        .set('Content-Type','application/x-www-form-urlencoded')
        .set('Referer',Referer+'topic/'+topic+'/')
      .end(function (err,res) {
         if(err){
             console.log(err);
            return err
         }
         console.log('成功删除');
      })

};
getTopic();

复制代码

使用

此脚本已经放在了我个人git上,有兴趣的可以fork一下,或者给个star,不胜感激;

使用方法,git上也有,我相信大家应该都会的;直接node 脚本名.js 

git传送门



问题

目前本删帖脚本只适用于删除所有帖子的评论,所以请慎用,我因为所有的帖子都是转租信息,所以可以一键放心删除,如果你有重要信息,请注意可以调用部分函数,填入你的指定帖子ID值进行删除;



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值