python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)


Posted in Python onFebruary 24, 2014

baiduclient.py

import urllib.parse
import gzip
import json
import re
from http.client import HTTPConnection
from htmlutils import TieBaParser
import httputils as utils
# 请求头
headers = dict()
headers["Connection"] = "keep-alive"
headers["Cache-Control"] = "max-age=0"
headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
headers["Content-Type"] = "application/x-www-form-urlencoded"
headers["Accept-Encoding"] = "gzip,deflate,sdch"
headers["Accept-Language"] = "zh-CN,zh;q=0.8"
headers["Cookie"] = ""
# cookie
cookies = list()
# 个人信息
userInfo = {}
def login(account, password):
    '''登录'''
    global cookies
    headers["Host"] = "wappass.baidu.com"
    body = "username={0}&password={1}&submit=%E7%99%BB%E5%BD%95&quick_user=0&isphone=0&sp_login=waprate&uname_login=&loginmerge=1&vcodestr=&u=http%253A%252F%252Fwap.baidu.com%253Fuid%253D1392873796936_247&skin=default_v2&tpl=&ssid=&from=&uid=1392873796936_247&pu=&tn=&bdcm=3f7d51b436d12f2e83389b504fc2d56285356820&type=&bd_page_type="
    body = body.format(account, password)
    conn = HTTPConnection("wappass.baidu.com", 80)
    conn.request("POST", "/passport/login", body, headers)
    resp = conn.getresponse()
    cookies += utils.getCookiesFromHeaders(resp.getheaders())
    utils.saveCookies(headers, cookies)
    # 登录成功会返回302
    return True if resp.code == 302 else False
    
def getTieBaList():
    '''获取已关注的贴吧列表'''
    conn = HTTPConnection("tieba.baidu.com", 80)
    conn.request("GET", "/mo/m?tn=bdFBW&tab=favorite", "", headers)
    resp = conn.getresponse()    
    tieBaParser = TieBaParser()
    tieBaParser.feed(resp.read().decode())
    tbList = tieBaParser.getTieBaList()
    return tbList
    
def getSignInfo(tieBaName):
    '''获取贴吧签到信息'''
    queryStr = urllib.parse.urlencode({"kw":tieBaName, "ie":"utf-8", "t":0.571444})
    conn = HTTPConnection("tieba.baidu.com", 80)
    conn.request("GET", "/sign/loadmonth?" + queryStr, "", headers)
    data = gzip.decompress(conn.getresponse().read()).decode("GBK")
    signInfo = json.loads(data)
    return signInfo
     
tbsPattern = re.compile('"tbs" value=".{20,35}"')
def signIn(tieBaName):
    '''签到'''
    # 获取页面中的参数tbs
    conn1 = HTTPConnection("tieba.baidu.com", 80)
    queryStr1 = urllib.parse.urlencode({"kw": tieBaName})
    conn1.request("GET", "/mo/m?" + queryStr1, "", headers)
    html = conn1.getresponse().read().decode()
    tbs = tbsPattern.search(html).group(0)[13:-1]
    # 签到
    conn2 = HTTPConnection("tieba.baidu.com", 80)
    body = urllib.parse.urlencode({"kw":tieBaName, "tbs":tbs, "ie":"utf-8"})
    conn2.request("POST", "/sign/add" , body , headers)
    resp2 = conn2.getresponse()
    data = json.loads((gzip.decompress(resp2.read())).decode())
    return data
    
def getUserInfo():
    '''获取个人信息'''
    headers.pop("Host")
    conn = HTTPConnection("tieba.baidu.com", 80)
    conn.request("GET", "/f/user/json_userinfo", "", headers)
    resp = conn.getresponse()
    data = gzip.decompress(resp.read()).decode("GBK")
    global userInfo
    userInfo = json.loads(data)

if __name__ == "__main__":
    account = input("请输入帐号:")
    password = input("请输入密码:") 
    ok = login(account, password)
    if ok:
        getUserInfo()
        print(userInfo["data"]["user_name_weak"] + "~~~登录成功", end="\n------\n")
        for tb in getTieBaList():
            print(tb + "吧:")
            signInfo = signIn(tb)
            if signInfo["no"] != 0:
                print("签到失败!")
                print(signInfo["error"])
            else:
                print("签到成功!")
                print("签到天数:" + str(signInfo["data"]["uinfo"]["cout_total_sing_num"]))
                print("连续签到天数:" + str(signInfo["data"]["uinfo"]["cont_sign_num"]))
            print("------") 
    else:
        print("登录失败")

htmlutils.py

'''
Created on 2014-2-20
@author: Vincent
'''
from html.parser import HTMLParser
class TieBaParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.tieBaList = list()
        self.flag = False
    def getTieBaList(self):
        return self.tieBaList
    def handle_starttag(self, tag, attrs):
        if tag == "a":
            for name , value in attrs:
                if name == "href" and "m?kw=" in value:
                    self.flag = True
    def handle_data(self, data):
        if self.flag:
            self.tieBaList.append(data)
            self.flag = False

httputils.py

'''
Created on 2014-2-20
@author: Vincent
'''
def getCookiesFromHeaders(headers):
    '''从http响应中获取所有cookie'''
    cookies = list()
    for header in headers:
        if "Set-Cookie" in header:
            cookie = header[1].split(";")[0]
            cookies.append(cookie)
    return cookies
def saveCookies(headers, cookies):
    '''保存cookies'''
    for cookie in cookies:
        headers["Cookie"] += cookie + ";"
def getCookieValue(cookies, cookieName):
    '''从cookies中获取指定cookie的值'''
    for cookie in cookies:
        if cookieName in cookie:
            index = cookie.index("=") + 1
            value = cookie[index:]
            return value
def parseQueryString(queryString):
    '''解析查询串'''
    result = dict()
    strs = queryString.split("&")
    for s in strs:
        name = s.split("=")[0]
        value = s.split("=")[1]
        result[name] = value
    return result
Python 相关文章推荐
python操作 hbase 数据的方法
Dec 18 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
pytorch ImageFolder的覆写实例
Feb 20 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 Python
Python学习之os包使用教程详解
Mar 21 Python
Python使用pyecharts控件绘制图表
Jun 05 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
python实现socket客户端和服务端简单示例
Feb 24 #Python
python抓取网页内容示例分享
Feb 24 #Python
使用python装饰器验证配置文件示例
Feb 24 #Python
python通过urllib2爬网页上种子下载示例
Feb 24 #Python
python控制台显示时钟的示例
Feb 24 #Python
python3访问sina首页中文的处理方法
Feb 24 #Python
python原始套接字编程示例分享
Feb 21 #Python
You might like
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
ThinkPHP分页类使用详解
2014/03/05 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
php实现微信支付之企业付款
2018/05/30 PHP
PDO::_construct讲解
2019/01/27 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
外企办公室竞聘演讲稿
2013/12/29 职场文书
消防安全管理制度
2014/02/01 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
财务检查整改报告
2014/11/06 职场文书
2014年度安全工作总结
2014/12/04 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python
Python利用zhdate模块实现农历日期处理
2022/03/31 Python