百度贴吧自动签到脚本 python3

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处! https://blog.csdn.net/wy_97/article/details/86657328

52上看到有人分享的,代码逻辑实在不敢恭维,做了一些逻辑功能方面的更改,添加了一些注释,代码直接贴下面了:

# -*- coding:utf-8 -*-
import requests,datetime,re,os,sys,time
from bs4 import BeautifulSoup


'''
    函数match_bar_name用来获取
    1、当前页
    2、关注贴吧名字和链接,返回列表数据,格式[{'name':'abc','link':'www.asdfaf.asdfasdf'},'name':'abc','link':'www.asdfaf.asdfasdf'}],
'''
def match_bar_name(soup):
    list=[]
    for i in soup.find_all('a'):
        if i.has_attr('href') and not i.has_attr('class') and i.has_attr('title'):
            if i.string != 'lua':
                list.append({'name':i.string,'link':'http://tieba.baidu.com/'+i.get('href')+'&fr=home'})
    return list


'''
    函数get_bar_link用来获取
    1、所有页
    2、关注贴吧
    3、名字和链接
'''
def get_bar_link():#遍历所有页,直到最后一页
    url=r'http://tieba.baidu.com/f/like/mylike?pn=%d'
    pg=1
    tieba_list = []
    while 1:
        res=s.get(url%pg,headers=headers)
        soup=BeautifulSoup(res.text,'html.parser')
        tieba_list.extend(match_bar_name(soup))
        if '下一页' in str(soup):
            pg+=1
        else:
            return tieba_list

'''
    name: 贴吧名字
    link:贴吧链接
'''
def check(name,link):#获取每个关注贴吧 提交数据tbs,然后签到,并返回签到结果
    try:
        res=s.post(link)
        tbs=re.compile('\'tbs\': "(.*?)"')
        find_tbs=re.findall(tbs,res.text)
        if not find_tbs:   # 没有查找到tbs,跳过这个吧的签到
            return -2
        data={
            'ie':'utf-8',
            'kw':name,
            'tbs':find_tbs[0],
        }
        url='http://tieba.baidu.com/sign/add'
        res=s.post(url,data=data,headers=headers)          ######## 签到 post
        # print(datetime.datetime.now(),'    ',name,'   ',res.json())
        return int(res.json()['no'])   #########返回提交结果
    except:
        return -1

def SignIn(data):
    try:
        res=check(data['name'], data['link'])
        if res==0:
            print( data['name'] +'吧签到成功\n')
            return True
        elif res==1101:
            print(  data['name'] +'吧已经签过\n')
            return True
        elif res==1102:
            print( data['name'] + '吧,签到太快,重新签到本吧\n')
            time.sleep(10)
            return False
        else:
            print(res)
            print('未知返回值,重新签到'+ data['name']+'吧')
            return False
    except :
        print('未知报错 重新签到'+ data['name']+'吧')
        return False

if __name__ == "__main__":
    s=requests.session()
    cookie=''#自行填充百度贴吧的cookies,浏览器-F12-网络-F5-request-cookies

    headers={
        'Cookie':cookie,
        'Upgrade-Insecure-Requests':'1',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
    }

    for i in get_bar_link():#根据签到的返回值处理结果,利用count做最多三次异常重复签到
        flag = False
        count = 0
        while flag == False:
            flag = SignIn(i)
            time.sleep(2)   #控制签到速度
            count = count + 1
            if count >= 3:
                print(i['name']+'吧异常,无法签到,已经跳过')
                break

其实也额可以用pyqt开发个图形化界面的,比较懒,不弄了

直接丢服务器弄个定时任务还是比较舒服的,hhhh

猜你喜欢

转载自blog.csdn.net/wy_97/article/details/86657328