鲁夫的爱

转载一个批量删除新浪微博发言的python脚本

分类: 小小极客    标签: , ,     评论: 21人评论

update 2011-12-17: 这个脚本的原作者写一了一个带图形界面的小工具,推荐用那个工具来清理新浪微博
update 2011-07-22: 转载原作者的更新说明:"新浪3g登录加入了两个小手段来防止bot(原因是前几天新浪被大规模扫号了). 一个是增加了vk字段, 另一个就是password字段变为password_随机数字. "

今天找了个Python脚本,把自己在新浪微博的发言清空了(很奇怪的需求),但是原作者lyxint没有详细说明这个脚本的用法。

我把这个脚本转载过来,说明一下用法:
1. 下载安装Python(我很久以前就安装了Python 2.7,跳过这一步);
2. 下载安装PycURL(用以发送http请求);
3. 新建一个Python,文件名为*.py(比如delWeibo.py),文件内容见后文(注意以UTF-8编码保存);
3.下载delWeibo.py
4. 运行CMD,cd到delWeibo.py所在的目录,运行:delWeibo.py yourUsername yourPassword 。

#delWeibo.py
# -*- coding: utf-8 -*-
from urllib import urlencode
from StringIO import StringIO
from sys import argv
from urlparse import parse_qsl
import pycurl
import re
#以上为本脚本的依赖

b = StringIO()
c = pycurl.Curl()
#这两行定义对象,c为cURL,用以发送http请求,b用于存放cURL得到的response

def fake_write(x):pass

def sigint(signum, frame):
    global b, c
    del b, c
    import sys
    print '\n\nsigint received, exiting...'
    sys.exit()

import signal
signal.signal(signal.SIGINT, sigint)

def reset():	#清空对象
    b.truncate(0)
    c.reset()
    c.setopt(pycurl.WRITEFUNCTION, b.write)
    c.setopt(pycurl.COOKIEJAR, 'cookies.txt')
#cookies.txt存放登录得到的cookies
    c.setopt(pycurl.FOLLOWLOCATION, True)
    return b, c

def login(username, password):
    reset()
    c.setopt(pycurl.URL, 'http://3g.sina.com.cn/prog/wapsite/sso/login_submit.php')
    c.perform()

    data = b.getvalue()
    vk = re.search(r'''name="vk"\s+?value="(.*?)"''', data).group(1)
    pname = re.search(r'''name="password_(\d+)"''', data).group(1)

    reset()
    c.setopt(pycurl.POST, True)
    c.setopt(pycurl.URL, 'http://3g.sina.com.cn/prog/wapsite/sso/login_submit.php')
    c.setopt(pycurl.POSTFIELDS, urlencode({
        'mobile': username,
        'password_'+pname: password,
        'vk': vk,
        'remember': 'on',
        'submit': '1'
    }))
#以上post参数通过curl发送到login_submit.php
    c.perform()
    return b.getvalue()

def del_tweets():
    while True:
        reset()
        c.setopt(pycurl.URL, 'http://t.sina.cn/dpool/ttt/home.php?cat=1')
        c.perform()
	#获取包含tweets的页面
        data = b.getvalue()
        data =  re.findall(r'href="mblogDeal\.php\?([^"]+?act=del[^"]+)"', data)
	#这两行用正则表达式得到tweets的id
        if not data:
            break
        for i in data:
            j = parse_qsl(i)
            qs = dict(j)
            qs['act'] = 'dodel'
            qs = '&'.join(['='.join(k) for k in qs.items()])
            url = 'http://t.sina.cn/dpool/ttt/mblogDeal.php?' + qs
	#得到删除所有tweets的url列表

            reset()
            c.setopt(pycurl.WRITEFUNCTION, fake_write)
            c.setopt(pycurl.URL, url)
            try:
                c.perform()
                print url
            except:pass

def unfollow():
    while True:
        reset()
        c.setopt(pycurl.URL, 'http://t.sina.cn/dpool/ttt/attention.php?cat=0')
        c.perform()
        data = b.getvalue()
        data =  re.findall(r'href="attnDeal\.php\?([^"]+?act=del[^"]+)"', data)
        if not data:
            break
        for i in data:
            j = parse_qsl(i)
            qs = dict(j)
            qs['act'] = 'delc'
            qs = '&'.join(['='.join(k) for k in qs.items()])
            url = 'http://t.sina.cn/dpool/ttt/attnDeal.php?' + qs

            reset()
            c.setopt(pycurl.WRITEFUNCTION, fake_write)
            c.setopt(pycurl.URL, url)
            try:
                c.perform()
                print url
            except:pass

def remove_followers(black=False):
    while True:
        reset()
        c.setopt(pycurl.URL, 'http://t.sina.cn/dpool/ttt/attention.php?cat=1')
        c.perform()
        data = b.getvalue()
        data =  re.findall(r'href="attnDeal\.php\?([^"]+?act=remove[^"]+)"', data)
        if not data:
            break
        for i in data:
            j = parse_qsl(i)
            qs = dict(j)
            qs['act'] = 'removec'
            if black:
                qs['black'] = '1'
            qs = '&'.join(['='.join(k) for k in qs.items()])
            url = 'http://t.sina.cn/dpool/ttt/attnDeal.php?' + qs

            reset()
            c.setopt(pycurl.WRITEFUNCTION, fake_write)
            c.setopt(pycurl.URL, url)
            try:
                c.perform()
                print url
            except:pass

if __name__ == '__main__':
    username, password = argv[1:]
#从命令行中获取参数,存放于username和password变量
    login(username, password)
#登录
    del_tweets()
#删除tweets
    #unfollow()
    #remove_followers()
本站文章除注明转载外,均为本站原创编译
转载请注明以下信息
文章转载自:鲁夫的爱 [ http://opengg.me/ ]
本文标题:转载一个批量删除新浪微博发言的python脚本
本文地址:http://opengg.me/301/a-python-script-to-delete-weibo-tweets/


06-27
2011
  1. 你好 问一下博主忙吗??我想用你这样的东西做一个类似的批量操作的程序 希望博主帮助 感谢感谢

  2. 我用了一次,脚本自动停止了,然后我发现我的微博还有1500多条,继续执行,无响应。请问是什么问题

    • 什么问题我没法判断,不过我可以教你如何判断:在文件头部import pprint,在del_tweets()函数体适当处使用pprint.pprint(obj)分析obj的内容。

无觅相关文章插件,快速提升流量

loading...