wb 黑名单批量操作

Posted my8100

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\nuid: {}\nerr: {}\ntraceback: {}.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(uuid: {} code: {}.format(uid, code))
                else:
                    logger.debug(uuid: {}.format(uid))    
            except Exception as err:
                logger.debug(u\nuid: {}\nresp: {}\nerr: {}\ntraceback: {}.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":"\u96b1\u85cf\u6210\u529f","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

        

 

以上是关于wb 黑名单批量操作的主要内容,如果未能解决你的问题,请参考以下文章

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。 已抽签决定比赛名单。有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。(代码片段

DocumentFragment批量操作dom

10个超级有用必须收藏的PHP代码样例

嵌入式 SQL Firebird 使用 Java SE 批量更新 OutOfMemoryError

vmware 批量自动删除虚拟机脚本,可以设置白名单

批量屏蔽符合条件的IP地址,支持添加白名单,IP段,增量,大于指定次数的IP