百度贴吧登录

import requests,random,rsa,base64

import time, json,re,math

s = requests.Session()
def get_idx(i):
    if i !='x' and i !='y':
        return i
    t = random.randint(0,16)
    if 'x' == i:
        n = t
    else:
        n = (3 & t) if 3 & t else 8
    return hex(n).replace('0x','')

def guideRandom():
    '''

    :return:返回gid
    '''
    guide = [get_idx(i) for i in "xxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"]
    return ''.join(guide).upper()


def make_time_timeStamp():
    """

    :return:时间戳
    """

    millis = int(round(time.time() * 1000))
    return str(millis)

def baseN(num, b):
    '''
    进制转换
    :param num:
    :param b:
    :return:
    '''
    return ((num == 0) and "0") or (baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
def get_callback(prefix):
    '''
    获取callback
    :param prefix:
    :return:
    '''
    ran_num = math.floor(2147483648 * random.random())
    return prefix+baseN(ran_num, 36)

def get_token(gid,tt,callback):
    '''

    :param gid: jid参数
    :param tt: 时间戳
    :param callback: 返回的参数
    :return: 返回token
    '''
    urls = 'https://tieba.baidu.com/'
    headers = {
        'Referer': 'http://tieba.baidu.com/f/index/forumclass',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36',
    }
    r = s.get(urls)
    url = 'https://passport.baidu.com/v2/api/?getapi&tpl=tb&apiver=v3&tt='+tt+'&class=login&gid='+gid+'&loginversion=v4&logintype=dialogLogin&traceid=&callback='+callback
    r = s.get(url)
    token = re.findall('"token" : "(.*?)",        "cookie"', r.text)[0]
    return token

def get_public(token,tt,gid,callback):
    '''

    :param token:
    :param tt:
    :param gid:
    :param callback:
    :return: 返回public的公钥,还有traceid
    '''
    url = 'https://passport.baidu.com/v2/getpublickey?token='+token+'&tpl=tb&apiver=v3&tt='+tt+'&gid='+gid+'&loginversion=v4&traceid=38F24D01&callback='+callback
    r = s.get(url)
    if r.status_code == 200 and callback in r.text:
        data = json.loads(re.search(r'.*?\((.*)\)', r.text).group(1).replace("'", '"'))
        return data.get('pubkey'), data.get('key'),data.get('traceid')

def encript_password(password, pubkey):
    '''

    :param password: 加密前的密码
    :param pubkey: rsa公钥
    :return:返回密码
    '''
    pub = rsa.PublicKey.load_pkcs1_openssl_pem(pubkey.encode('utf-8'))
    encript_passwd = rsa.encrypt(password.encode('utf-8'), pub)
    print(base64.b64encode(encript_passwd).decode('utf-8'))
    return base64.b64encode(encript_passwd).decode('utf-8')

def login(token,gid,username,password,rsakey,traceid,callback,tt):
    data = {

    'staticpage': 'https://tieba.baidu.com/tb/static-common/html/pass/v3Jump.html',
    'charset': 'UTF-8',
    'token': token,
    'tpl': 'tb',
    'subpro':'' ,
    'apiver': 'v3',
    'tt': tt,
    'codestring':'' ,
    'safeflg': 0,
    'u': 'https://tieba.baidu.com/index.html',
    'isPhone': '',
    'detect': 1 ,
    'gid': gid,
    'quick_user': 0,
    'logintype': 'dialogLogin',
    'logLoginType': 'pc_loginDialog',
    'idc': '',
    'loginmerge': 'true',
    'splogin': 'rate',
    'username': username,
    'password': password,
    'mem_pass': 'on',
    'rsakey': rsakey,
    'crypttype': 12,
    'ppui_logintime': 73459,
    'countrycode': '',
    'fp_uid': '',
    'fp_info': '',
    'loginversion': 'v4',
    'dv': 'tk0.5928527079156561544428481110@nnp0anAEQgAm-USL-g2k4d5u~-nm~~2oXZPo~gAErWAEDpAEQgAm-USL-g2krWAlsfBkKf2kqg0rvnFZ6hE0yBHv5sMlr~MZyZJW0dEOvb7G~dAk4d5f~Xnm~~2vFhEKSGsHZBMZhEHvp-AvyBSM5DJKX1PLHgA3qw531ptp0JB53Kw2kHx5V~-Akr-5d-HsHXuHKv5MZysHZhBAEhBMW7ePfFDJD0APWScPK6wPR~W5EJgA3q~2krx5EQx2u~W5lrgAlrx2kAW5lsd2vFhEKSGsHZBMZhEHvp-AvyBSM5DJKX1PL0p5lqx2kAxnm~ZAEQdAG-HsHXuHKv5MZysHZhBAEhBMfh1Jf5fPf6KBk9x5d~w53sg5l4x5lJg0rvnFZ6hE0yBHv5sMlr~MZylSL6bNMFpBssNusyhe1kJhypgAG~d2k9fwpqSog~23HXA3QZA3J~5lK-5E9Z53rZ5kswA3Qwnkr-AEq_gp0ysNuFwJuAi2dywNL0V9GXV9LDKSGX3PWweNLXK7MQUNuFbPm-ZPOFD7ODU7Ls_GpSAm~~2krZnkrg5ErWAG~-5ks~2kK~Am~-5ks~2krw5kqgnk9~',
    'traceid': traceid,
    'callback': callback,


    }
    url = 'https://passport.baidu.com/v2/api/?login'
    r = s.post(url,data=data)
    print(r.cookies)


if __name__ == '__main__':
    '''
    已完成
    tt
    gid
    token
    '''
    # get_sign()
    # get_callback('bd__pcbs__')
    username = 'xxxxx'
    password = 'xxxxxx'
    tt = make_time_timeStamp()
    gid = guideRandom()
    callback=get_callback('bd__pcbs__')
    token = get_token(gid, tt,callback)
    public_data=get_public(token,tt,gid,callback)

    login(token, gid, username=username, password=password, rsakey=public_data[0], traceid=public_data[2], callback=callback, tt=tt)
    # encript_password('123456',pubkey)

 

百度贴吧电脑版是中文最大社区百度贴吧的客户端,手机版百度贴吧可以实现电脑网页浏览的大部分功能,支持帖子搜索和浏览,还有特权,签到多倍积分等。 百度贴吧电脑版特色内容 百度贴吧客户端---为兴趣而生! 百度贴吧是以兴趣主题聚合志同道合者的互动平台。从2003年至今,百度贴吧拥有6亿注册用户,800万贴吧。在这里,每天都在诞生神贴,这里是当今网络新文化的发源地。每天都有数千万用户在贴吧找到自己的兴趣所在。 贴吧手机客户端,更为兴趣而生,选择你喜欢的兴趣星球,找到精彩兴趣吧,轻松定制专属你的首页内容。 如果你热爱养殖,花吧、多浆植物吧、绿萝吧、芦荟吧等2000多个吧等你参与讨论养殖心得; 如果你喜爱旅行,旅行吧、驴友吧、背包客吧、穷游吧等1700多个吧等你一起出发; 如果你爱好休闲活动,摄影吧、钓鱼吧、推理题吧、骑行吧等400多个吧会让你结识很多伙伴; 如果你是收藏达人,手工吧、翡翠吧、手办吧、文玩吧、模型吧等700多个吧等你来晒晒珍藏; 如果你是怪咖,黑丝吧、弱智吧、吃货吧、纹身吧、同性恋吧等3200多个吧会让你找到组织; 如果你是明星粉丝,体育追星狂,动漫爱好者,游戏玩家,美食达人,文艺青年,贴吧会满足你所有的兴趣,同样会带你认识有共同爱好的朋友。 百度贴吧客户端 v2015 电脑版更新日志 1、发贴输入框优化 2、贴子详情页图片展示优化 3、优化直播间功能 4、解决用户反馈的一些问题 百度贴吧电脑版截图
百度贴吧模拟登录爬虫是一种程序,可以模拟用户登录百度贴吧网站,并获取用户在贴吧中的相关信息。下面是一个简单的百度贴吧模拟登录爬虫的实现步骤: 1. 导入所需的库:使用Python编程语言,需要导入requests、BeautifulSoup和re等库。 2. 发送登录请求:使用requests库发送POST请求,将用户名和密码等登录信息作为参数传递给登录接口。 3. 获取登录后的Cookie:登录成功后,服务器会返回一个包含用户登录状态的Cookie,需要将其保存下来,以便后续的请求中使用。 4. 访问目标页面:使用requests库发送GET请求,携带登录后的Cookie,访问目标页面。 5. 解析页面内容:使用BeautifulSoup库解析目标页面的HTML内容,提取所需的信息。 6. 数据处理和存储:对解析得到的数据进行处理和存储,可以保存到本地文件或者数据库中。 需要注意的是,百度贴吧网站有反爬机制,为了避免被封禁或限制访问,可以采取以下策略: - 使用随机User-Agent:在发送请求时,设置随机的User-Agent头部信息,模拟不同浏览器的访问行为。 - 设置访问间隔:在发送请求之间设置适当的时间间隔,避免过于频繁的请求。 - 处理验证码:如果遇到验证码,可以使用第三方库或者手动输入验证码进行处理。 - 使用代理IP:使用代理IP进行请求,隐藏真实的IP地址。 以上是一个简单的百度贴吧模拟登录爬虫的实现步骤和一些反爬策略。具体的实现方式和代码可以根据具体需求和情况进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值