pythonPython的自由天空

Python爬虫实践:如何优雅地删除豆瓣小组的帖子

2017-04-30  本文已影响723人  一路行歌

前言

文章起源于自己的一个需求:想要删除掉自己的若干个小号在豆瓣小组上的发帖及回复记录。这是一件看似简单的事情,但是一遍一遍的重复操作实在让我感到非常绝望,特别是删除自己的回复时,有时候回复的帖子的回复有好几十页,得一页一页的翻。于是就想到用脚本来代替人力操作。对于一名职业为前端工程师的人而言,最容易想到的方法就是打开DevTools发个Ajax请求直接搞定了。不过经历过几次之后发现这种方法很难沉淀下来,于是就想能不能写到脚本里面。一开始依旧想到的是用NodeJS来实现,但是由于最近由于接触程序化交易比较多,发现如果再不温习一下Python大蟒蛇又要忘光了,于是就想借机同时练练Python。

结果

先说结果

安装

两种方式:

  1. 源代码已放到github,可自行查看下载:https://github.com/acrazing/dbapi
git clone https://github.com/acrazing/dbapi.git
cd dbapi
# 安装依赖
pip install -r requirements.txt
  1. 包已发布到pip,可自行安装:
pip install dbapi

使用

首先得安装,然后:

  1. 登录客户端:因为客户端有缓存Session,所以你只需要登录一次,在命令行中:
    python -m dbapi.DoubanAPI test_client login "username" "password"
    
  2. 删除自己回复过的帖子:因为要删除自己发的帖子实际上是要删除掉所有自己在帖子下的回复,如果回复非常多不知道自己回复的在哪一页或者自己的回复非常多,操作起来会比较恶心
    python -m dbapi.DoubanAPI test_api remove_commented_topic "topic_id"
    # topic_id 可以通过下面这个命令拿到:
    python -m dbapi.DoubanAPI test_api list_commented_topics
    # 这个命令会返回所有自己回复过的帖子
    
  3. 删除自己发的帖子:因为要先删除所有的回复,所以也很恶心
    python -m dbapi.DoubanAPI test_api remove_topic "topic_id"
    # topic_id 可以通过下面这个命令拿到:
    python -m dbapi.DoubanAPI test_api list_user_topics
    # 这个命令会返回所有自己发布的帖子
    

需求分析

  1. 首先需求很明确:快速删除掉在豆瓣小组内的发帖和回复记录
  2. 要访问自己的豆瓣小组,需要登录帐号获取会话信息,其中一个关键的信息会话IDdbcl2设置了HttpOnly,此外还需要一个动态idck。当然这些问题都可以通过把所有的Cookie添加到客户端搞定。
  3. 要删除发帖记录,需要先删除掉贴子下的所有回复,在删除别人的回复时,需要调用管理员权限并提交理由
  4. 要删除掉回复记录,需要删除掉所有的自己的回复,但是别人的引用是无法删除的,所以最后要真正隐藏掉记录,需要注销帐号。
  5. 登录是敏感操作,频繁登录很容易触发机器人,需要缓存会话信息
  6. 访问频率过高也会触发机器人,需要做访问限制

接口列表

通过浏览器抓包发现,相关操作主要有几下几个接口:

此外还有一些已实现但是与此无关的接口,可以到代码中dbapi/endpoints.py中查看

接口设计

依赖

代码分析

略,请参考源代码

其它

除了小组相关API外,还实现了用户People相关的部分API,可以实现获取用户profile,关注用户及关注者,代码在dbapi/People.py中。利用这几个API设计了一个多线程爬虫,用来爬取豆瓣上的热门用户,代码在test/relation.py中,爬取的结果放在__relation__.json中。目前我注册了4个豆瓣账号,开了4个线程进行爬取。最开始由一个种子用户sevear,爬取其关注的用户中关注者大于100的用户,然后逐渐将关注者最小值加到现在的10000。目前已发布到Github的结果中,已经爬取了33599个用户,其中1069个用户的关注者超过了10000。发现了一些比较有趣用户,比如熊阿姨等;也发现热门的用户大多都会贴上自己的微信公众号,微博等信息;还有很多从05年就开始使用豆瓣的重度用户,也有很多注销了的账号。虽然我也很多年前就注册了豆瓣,但是一直没有发现除了发租房贴,看电影评价,听FM(现在已经不用了)之外还有什么其它价值。也许这些人可以给我答案。

总结

上一篇 下一篇

猜你喜欢

热点阅读