zoukankan      html  css  js  c++  java
  • wb 黑名单批量操作

    0. 参考

    yu961549745/WeiboBlackList  微博批量拉黑

    1. 代码 block.py

    更新内容:多线程,urllib.request 改为 requests + session

    改成从 firefox 或 chrome 读取 cookie 更方便,懒得改了

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*
    
    import requests
    from requests.exceptions import (ConnectionError, ConnectTimeout, ReadTimeout, SSLError,
                                    ProxyError, RetryError, InvalidSchema)
    import threading
    import Queue
    import traceback
    
    import logging
    def get_logger():
        logger = logging.getLogger("threading_example")
        logger.setLevel(logging.DEBUG)
        
        # fh = logging.FileHandler("d:/threading.log")
        fh = logging.StreamHandler()
        fmt = '%(asctime)s - %(threadName)-10s - %(levelname)s - %(message)s'
        formatter = logging.Formatter(fmt)
        fh.setFormatter(formatter)
    
        logger.addHandler(fh)
        return logger
        
    logger = get_logger() 
        
    
      
    def block():
        while True:
            try:
                uid = task_queue.get()
                data = dict(payload)  #dict
                data.update({'uid': uid})
                resp = s.post(url, data=data)
            except (ConnectionError, ConnectTimeout, ReadTimeout, SSLError,
                    ProxyError, RetryError, InvalidSchema) as err:
                task_queue.task_done()  ############### 重新 put 之前需要 task_done ,才能保证释放 task_queue.join() 
                task_queue.put(uid)     
            except Exception as err:
                logger.debug(u'
    uid: {}
    err: {}
    traceback: {}'.format(uid, err, traceback.format_exc()))
                task_queue.task_done()  ############### 重新 put 之前需要 task_done ,才能保证释放 task_queue.join() 
                task_queue.put(uid)
            else:
                try:
                    code = resp.json()['code']
                    if code != '100000':
                        logger.debug(u'uid: {} code: {}'.format(uid, code))
                    else:
                        logger.debug(u'uid: {}'.format(uid))    
                except Exception as err:
                    logger.debug(u'
    uid: {}
    resp: {}
    err: {}
    traceback: {}'.format(uid, resp.text, err, traceback.format_exc()))
                finally:
                    task_queue.task_done()
                    
    
    
    if __name__ == '__main__':
        
        # lines: request in raw format captured from Fiddler 
        '''
        ['POST http://weibo.com/aj/filter/block?ajwvr=6 HTTP/1.1',
         'Host: weibo.com',
         'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
         'Accept: */*',
         'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
         'Accept-Encoding: gzip, deflate',
         'Content-Type: application/x-www-form-urlencoded',
         'X-Requested-With: XMLHttpRequest',
         'Referer: http://weibo.com/u/5471246591?is_hot=1',
         'Content-Length: 57',
         'Cookie: your cookie###########################################',
         'Connection: keep-alive',
         '',
         'uid=5471246591&filter_type=1&status=1&interact=1&follow=1']
        '''
    
        # 移除黑名单:
        # In [317]: url2='http://weibo.com/aj/f/delblack?ajwvr=6'
        # In [318]: resp = s.post(url2, data={'uid':'5209943797'})
    
        # In [320]: resp.json()
        # Out[320]: {u'code': u'100000', u'data': {}, u'msg': u''}
        
        with open('uids.txt') as f:
            uids = [uid.strip() for uid in f.readlines()]
    
        with open('headers.txt') as f:
            lines = [i.strip() for i in f.readlines()]
        
        url = lines[0].split()[1] 
        
        headers = {}
        for line in lines[2:-2]:
            k, v = line.split(': ',1)  #:space
            headers[k] = v
            
        data=lines[-1]
        # datas = [re.sub(r'uid=d+','uid=%s'%uid ,data) for uid in uids]
        payload = dict([i.split('=',1) for i in data.split('&')])
        # payloads = [payload.update({'uid': uid}) for uid in uids]
        # payloads = []
        # for uid in uids:
            # payload.update({'uid': uid})
            # payloads.append(dict(payload))  ### dict
        
        # for payload in payloads:
            # r = requests.post(url, headers=headers, data=payload)
        # r.text
        # {"code":"100000","msg":"u96b1u85cfu6210u529f","data":{}}        
        # In [287]: r.json()['code']
        # Out[287]: u'100000'
    
    
        s = requests.Session()
        s.headers = headers
        s.mount('http://', requests.adapters.HTTPAdapter(pool_connections=1000, pool_maxsize=1000))
        
    
        task_queue = Queue.Queue()        
        for uid in uids:
            task_queue.put(uid)
        
        threads = []
        for i in range(100):
            t = threading.Thread(target=block)  #args接收元组,至少(a,)
            threads.append(t)
    
        for t in threads:
            t.setDaemon(True) 
            t.start()  
          
        task_queue.join()    
        print 'task done'
    
            
  • 相关阅读:
    C++-类的const成员变量
    Linux-编译器gcc/g++编译步骤
    C++-理解构造函数、析构函数执行顺序
    Linux-Unix版本介绍
    C++-const_cast只能用于指针和引用,对象的const到非const可以用static_cast
    Linux-如何查看登陆shell的类型
    C++-不要在构造和析构函数中调用虚函数
    C++-模板的声明和实现为何要放在头文件中
    C++-函数模板特化如何避免重复定义
    Linux-Gcc生成和使用静态库和动态库详解
  • 原文地址:https://www.cnblogs.com/my8100/p/7649965.html
Copyright © 2011-2022 走看看