python3贴吧_python3 百度贴吧 自动签到

因为百度异地登陆有诸多限制,所以使用了cookie登录,实现一键签到所有关注贴吧,效果如下图

none.gif

签到截图.jpg (88.2 KB, 下载次数: 0)

2019-1-21 12:36 上传

python3 使用到的第三方库 有 requests ,bs4

只需要输入自己的cookie值就可以使用,挂在自己的服务器上,每天自动签到美滋滋,

cookie有效期很久,我自己的已经使用了四十多天了,依然有效

# -*- coding:utf-8 -*-

import requests,datetime,re,os,sys,time

from bs4 import BeautifulSoup

def match_bar_name(soup):

'''

获取 #### 当前页 ### 关注贴吧名字 和 链接,返回列表数据,格式[{'name':'abc','link':'www.asdfaf.asdfasdf'},'name':'abc','link':'www.asdfaf.asdfasdf'}],

这里关注的贴吧名字隐藏在了html中,无法直接访问获取json返回值,用到了bs4处理网页数据

'''

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')})

return list

# url='http://tieba.baidu.com/f/like/mylike?v=%d'%int(float(time.time())*1000)

def get_bar_link():

'''

获取 ##### 所有页 ####关注贴吧 名字 和 链接,遍历所有页,直到最后一页

'''

url=r'http://tieba.baidu.com/f/like/mylike?pn=%d'

pg=1

l = []

while 1:

res=s.get(url%pg,headers=headers)

soup=BeautifulSoup(res.text,'html.parser')

l.extend(match_bar_name(soup))

if '下一页' in str(soup):

pg+=1

else:

return l

def check(name,link):

'''

name: 贴吧名字

link:贴吧链接

利用正则表达式 获取每个关注贴吧 提交数据tbs

然后签到,并返回签到结果

'''

try:

res=s.get(link)

tbs=re.compile('\'tbs\': "(.*?)"')

find_tbs=re.findall(tbs,res.text)

if not find_tbs: ###### 没有查找到tbs 跳过这个吧的签到 ##################

return -1

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

s=requests.session()

cookie='BAIDUID=A3043B35EDF6***********************************47991882' #########类似于这样的一段代码########### 浏览器提取 ########等会附上提取教程

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():

'''

根据签到的返回值 处理结果

'''

try:

res=check(i['name'], i['link'])

if res==0:

with open(os.path.join(sys.path[0], '1.log'), 'a+') as f: ###############这边使用sys.path 是为了在linux 后台启动时识别路径 ################

f.write(str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ' ' + i['name'] + ' 签到成功\n')

elif res==1101:

with open(os.path.join(sys.path[0], '1.log'), 'a+') as f:

f.write(str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ' ' + i['name'] + ' 亲,你之前已经签过到了\n')

elif res==1102:

with open(os.path.join(sys.path[0], '1.log'), 'a+') as f:

f.write(str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ' ' + i['name'] + ' 签到太快,重新签到本吧\n')

time.sleep(10)

check(i['name'], i['link'])

else:

print('未知返回值,重新签到本吧')

check(i['name'], i['link'])

time.sleep(2) ########防止签到太快

except :

print('未知报错 重新签到本吧')

check(i['name'], i['link'])

'''

附上 3种 签到返回json

签到太快 {'no': 1102, 'error': '您签得太快了 ,先看看贴子再来签吧:)', 'data': ''}

已经签过到 {'no': 1101, 'error': '亲,你之前已经签过了', 'data': ''}

成功签到的 {'no': 0, 'error': '', 'data': {'errno': 0, 'errmsg': 'success', 'sign_version': 2, 'is_block': 0, 'finfo': {'forum_info': {'forum_id': 548717, 'forum_name': 'katana'}, 'current_rank_info': {'sign_count': 966}}, 'uinfo': {'user_id': 774850436, 'is_sign_in': 1, 'user_sign_rank': 966, 'sign_time': 1548040220, 'cont_sign_num': 1, 'total_sign_num': 1, 'cout_total_sing_num': 1, 'hun_sign_num': 0, 'total_resign_num': 0, 'is_org_name': 0}}}

'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值