缘起
书接上文:《纷争世事无穷尽》,昨晚写了简单的脚本,先在本机运行几天,排除各类Bug后再挂到SAE。
由于网址总数不多(一万七千左右),没用Bloom过滤器,直接使用txt保存+set查重复。SAE上貌似不能直接创建文件,得改成使用数据库。另外SAE只支持Python 2.7,还得改一些语法。
说明
功能简介
忽略已存在的提问,仅扫描并举报新出现的提问。为免爬得太快被封,仅使用单线程。
脚本中一共有三个类:
- ZhiHuClient:登录类,维护一个登录知乎的session。
首次使用时需要调用ZhiHuClient().login(username, password)
方法登录并生成Cookies,人肉识别验证码。以后就可以直接用Cookies登录了。 - Topics:待扫描的话题类。
- Scanner:扫描和举报的工具类,脚本入口是
scanning()
方法。
首次使用时需调用firstScanning()
方法抓取已存在的问题网址。
完成初始化后,每次启动脚本只需一行代码:
Scanner().scanning()
输出如下:
==================================================
检测到cookie文件,直接使用cookie登录
已登陆账号: ........
已读取 checkedURLs 16931 个
开始扫描
已举报: 壬申、癸卯、戊申、乙卯,男,求先生看看事业……? 2015-12-16 12:03:07
已举报: 请帮忙看看这个八字,地支三合火,水为用神,又要走伤官大运 有点怕? 2015-12-16 12:22:47
已举报: 请各位高手随缘看一下婚姻和事业,以后发展怎么样? 2015-12-16 12:39:16
已举报: 能不能解释我做过的一些能预示未来的梦? 2015-12-16 12:46:29
已举报: 有没有算命的骗子在街上误拉住一位易学大师算命,反倒被大师算得跪地求解的事件? 2015-12-16 12:53:41
已举报: 老婆要生了,求个宝宝的名字,姓于,多谢? 2015-12-16 13:39:11
已举报: 麻烦大师帮忙看看手相? 2015-12-16 13:49:33
已举报: 求大神帮忙想个老人居住的地方的名字,复古,自然,朴实,有活力的? 2015-12-16 13:55:46
已举报: 从命理学角度看,如梵高这般死后才被世人承认而获得成就的人生可以被推断出来吗? 2015-12-16 14:10:14
已举报: 求算子嗣? 2015-12-16 14:21:35
每天不定时会集中收到私信通知处理结果,在https://www.zhihu.com/community/report可以看到本账号举报结果汇总:
脚本跑了一天半,举报了120个左右的新问题,关闭率在95%以上。从图上最后一列可以发现,虽然脚本一律以「针对具体病情的求药问药」为理由举报所有问题,但是管理员接到举报,自己也会判断属于哪一类。所以不再需要在脚本中加入判断逻辑。
改进空间
管理员自己会判断Scanner
类的canReport()
方法用于检测一个问题是否符合举报条件;getReason()
方法判断举报原因。这两个规则还没开始写,目前一律以「针对具体病情的求药问药」为理由举报所有问题。- 知乎管理员会私信回复举报结果。添加读取和保存举报结果的功能。
- 添加判断和举报回答的功能。
- 保存网址改成保存到数据库
- 改成Python 2.7 的语法
- 知乎崩溃时,程序也会报错。
ChangeLog
- 2015年12月17日,每个话题下所有问题的网址保存在单独的文件中
- 2015年12月14日,扫描和举报相关话题下所有新问题。
源代码
1 | #!/usr/bin/env python |