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

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

时间: 2024-09-20 00:42:05

python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)_python的相关文章

爬虫-python3模拟登录百度贴吧

问题描述 python3模拟登录百度贴吧 python3模拟登录百度贴吧,如题,应该怎么弄呢?我网上搜索看到基本很多都要用到token,具体百度登录需要什么参数不是很清楚.麻烦各位指教下,谢谢了 解决方案 http://www.jb51.net/article/45775.htm 参考下.这种程序也可以通过fddler抓包自己分析. 解决方案二: 需要先用浏览器工具查看一下登陆过程,分析登陆的参数以及各中信息,然后再来模拟构造

Python模拟百度登录实例代码

本来写这个玩意儿是想用来自动登录百度,然后根据贴吧内的的排名抓取会员头像的,比如生成一个贴吧千人头像图或万人头像图.也算是练练手.完成后才发现抓那个贴吧排名完全不需要登录-也好,以后用来做自动一键签到(经常忘打卡),抢二楼什么的,也不错~~如今在博客上发个文章用不了多长时间就被抄走了,感觉自己能做的也只有在此鄙视一下它们.废话太多,容易招人恨,以下是代码: #-*- coding:gbk -*- # # 模拟百度登录 for Python2.7 # 其中显示验证码部分 需要使用PIL库 # 需要

js仿百度登录页实现拖动窗口效果_javascript技巧

在web开发中,鼠标拖拽效果非常常见,例如百度的登录页,点击登录会弹出一个窗口,并且这个窗口可以拖动:那么这样的拖拽效果如何实现呢 ?其实实现很简章,搞清楚他的原理就很容易了:首当其冲的,要涉及到鼠标的三个事件,分别为鼠标按下.移动.松开:在这三个事件里分别计算元素鼠标的位置即可: 复制代码 /******* 拖拽原理1: 拖拽状态 = 0 鼠标在元素上按下的时候 { 拖拽状态 = 1 记录下鼠标的x和y坐标 记录下元素的x和y坐标 } 鼠标在元素上移动的时候 { 如果拖拽状态是0就什么也不做.

百度登录指南百度收录与解封技巧

先花5分钟看完一下的页面性的文章.百度登录指南   登录  1. 为什么要登录百度?  2. 怎样登录百度?     3. 登录百度收费吗?  4. 为什么在百度中搜索不到我的网站?  5. 我的网站没有在百度登录过,为什么也能被百度找到?  6. 我的网站不想登录百度,我该怎么办?  7. 登录百度需要多长时间?  8. 任何网站都能登录百度吗?  9. 我的网站有很多网页,为什么只有几个网页能登录百度?  10.我的网站有三个网址,为什么在百度只能找到一个?  11.我的网站改版了,百度能帮

百度登录指南

中介交易 SEO诊断 淘宝客 云主机 技术大厅 百度登录指南 1.为什么要登录百度? 答:因为目前百度在中文搜索领域居绝对领先地位,每天有超过6000万人次访问和使用百度搜索,是全球最多中文用户喜欢选用的搜索引擎. 2.怎样登录百度? 答:只要在这里http://www.baidu.com/search/url_submit.html 提交您的网址即可. 3.登录百度收费吗? 答:登录百度是免费的. 4.为什么在百度中搜索不到我的网站? 答:可能的原因如下一:您还没有向Baidu登录您的网站 二

请问写python爬虫如何用urllib或者requests模拟用户登录

问题描述 请问写python爬虫如何用urllib或者requests模拟用户登录 比如我在百度文库下个课件,http://youke.baidu.com/view/05984a27b4daa58da0114ac6, 我用urllib2或者request,我可以用urllib2.open(url)或者requests.get(url)来打开页面,但是不知道如何写cookie的,就是让浏览器认为你已经登录了,请问如何写urllib或者requests.get呢?谢谢 解决方案 可以参考下,过程都关

百度世界大会8月22日举行 将分享移动领域最新成果

百度世界大会官方网站(http://baiduworld.baidu.com/2013)显示,8月22日百度世界2013将在北京中国大饭店举行,届时百度将分享这一年来在移动领域的最新成果与发现. 百度在移动互联网领域的布局与进展一直为业界关注.去年李彦宏在百度世界大会上宣布面向开发者开放核心云能力和七种武器,帮助开发者降低开发成本.获取用户:今年百度移动搜索.百度地图先后宣布日均活跃用户突破一亿,成为百度移动业务布局中重要的"双入口":同时,凭借"PK大咖"功能在微

中国藏獒网分享百度知道推广技巧

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 一个好的网站除了PR值的评估意外,外链的多少也成为了SEO人员看网站品质的关键,一个高权重的外链平分,对于一个网站来说是很好的,如果是上百个搞质量外链的话,那效果不可估量,众所周知,百度一向对自己旗下的产品是爱护有加,百科,文库,贴吧,知道等等都是排在第一页的.那么怎么样在百度旗下产品加上自己网站的外链获得百度的权重与认可呢? 百度产品十分多

李彦宏在百度世界大会上正式对外发布了新的百度首页

百度CEO李彦宏在百度世界大会上正式对外发布了新的百度首页,在用户登录的情况下,百度首页将增加导航.实时热点.应用.新鲜事等四个模块.同时,百度昨天还宣布推出移动操作系统"百度·易",将与移动终端厂商进行定制和内嵌合作分成. 开放新首页 关于新的百度首页,李彦宏表示,百度新首页面向所有站长.开发者.服务提供商开放,"每个开发者都可以上百度首页".李彦宏指出,百度新首页将服务集成,满足用户全方位的互联网需求;能实现一号直达所有互联网深度服务;同时,新首页具备智能推荐功