18251370925 发表于 2019-1-21 12:41

python3 百度贴吧 自动签到

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

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,
      }

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

'''

18251370925 发表于 2020-3-15 21:20

zy0123 发表于 2020-3-12 11:55
用了几天,现在执行出现 ‘’未知返回值,请重新签到本吧”

我这一直稳定运行上个截图看看

18251370925 发表于 2019-1-21 17:20

向往的歌 发表于 2019-1-21 15:35
亲,我知道是python3代码。我想问的是——要如何运行?电脑没有装python3啊……

先去装个python3在说

shu3590952 发表于 2019-1-21 13:16

谢谢楼主啦

向往的歌 发表于 2019-1-21 13:44

请问,这一串代码如何运行???

wikiyc 发表于 2019-1-21 13:57

谢谢分享,下班后测试下

rxxcy 发表于 2019-1-21 14:08

哥们你需要重新排一下版

坏人。丶 发表于 2019-1-21 14:18

找不到从哪里运行。。主函数呢

18251370925 发表于 2019-1-21 15:04

rxxcy 发表于 2019-1-21 14:08
哥们你需要重新排一下版

直接粘贴代码过来的

18251370925 发表于 2019-1-21 15:05

坏人。丶 发表于 2019-1-21 14:18
找不到从哪里运行。。主函数呢

从s=requests.session()往下都是主函数

18251370925 发表于 2019-1-21 15:06

向往的歌 发表于 2019-1-21 13:44
请问,这一串代码如何运行???

python3代码

向往的歌 发表于 2019-1-21 15:27

亲,我知道是python3代码。我想问的是——要如何运行?电脑没有装python3啊……
页: [1] 2 3
查看完整版本: python3 百度贴吧 自动签到