本文原地址

目录

注意事项
配置文件
贴吧登陆过程分析
贴吧签到
完整代码

注意事项

贴吧签到是在登陆百度账号的基础上进行的,所以首先需要知道如何获取百度账号的授权cookie,具体可参考:python模拟登陆百度

配置文件config

该文件配置了请求头等信息

# -*- coding: utf-8 -*-
headers = {'passport_headers':{'Host': 'passport.baidu.com','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)','Refer': 'https://www.baidu.com/?tn=62095104_7_oem_dg'},'tieba_headers':{'Host': 'tieba.baidu.com','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)','Refer': 'https://www.baidu.com/?tn=62095104_7_oem_dg','Origin': 'https://tieba.baidu.com'}
}

贴吧登陆过程分析

我们知道,登陆百度以后,是不需要再次验证就可以访问贴吧的,所以贴吧的授权cookie是否和百度账号的授权cookie是一致的呢?,为了验证,我们利用百度账号的授权cookie来访问贴吧首页,看是否能得到我们需要的信息。关于如何获取百度账号的授权cookie可参考:python模拟登陆百度。假设百度账号的授权信息已经以json的方式存入到auth_cookies.txt文件中,则访问贴吧首页的代码如下:

import configwith open('auth_cookies.txt', 'r') as f:cookiesstr = f.read()auth_cookies = json.loads(cookiesstr)tieba_url = 'https://tieba.baidu.com/index.html'
tieba_r = requests.get(tieba_url, cookies=passport_authcookies, headers=config.headers['tieba_headers'])
print(tieba_r.text)

运行上面的程序可以发现程序报错,错误原因如下

这个错误的意思是该请求重定向次数过多,这与我们预期的竟然不一样,利用百度账号的授权cookie不能直接访问百度贴吧。但是我们在网页上明明登陆了百度账号后是直接可以访问贴吧相关内容的。为了探究这个问题,我们在网页上登陆百度账号后,先删除贴吧相关cookie,再次访问贴吧,利用浏览器的开发者模式进行请求追踪。
** 删除贴吧cookie: ** 如下图,删除域名tieba.baidu.com下的所有cookie,若没有,则不进行任何操作。

打开浏览器开发者模式,访问贴吧首页 https://tieba.baidu.com/index.html,追踪到的访问信息如下:


可以看到,该请求经过了三次重定向才到达了真正的贴吧首页,可以预测的是,重定向的过程肯定设置或更新了新的授权cookie。依次对这三个请求进行分析:


第一个请求的具体信息如下:

可以看出,该请求利用了之前获得到的百度账号授权cookie中的BAIDUID,BUDSS两个参数,并设置了TIEBA_USERTYPE这个cookie`


第二个请求的具体信息如下:


可以看到,该请求并未设置任何cookie,但是,该请求的地址https://passport.baidu.com/v3/login/api/auth/,这正是为了验证百度账号授权信息的有效性。


第三个请求的具体信息如下:

从图中表红的地方可以看出,该请求利用之前得到的百度账号授权cookie中的stoken参数重新向服务器获得了一个属于百度贴吧自己的sotken。之后利用该sotken重定向到贴吧首页。获得该stoken的代码如下,将其封装为一个函数,函数参数为百度账号的授权cookie

def get_tieba_authcookies(passport_authcookies):# 获取授权cookiewith open('auth_cookies.txt', 'r') as f:cookiesstr = f.read()auth_cookies = json.loads(cookiesstr)# 首次访问贴吧首页时会重定向到passprot.baidu.comtieba_url = 'https://tieba.baidu.com/index.html'tieba_r = requests.get(tieba_url, cookies=passport_authcookies, headers=config.headers['tieba_headers'],allow_redirects=False)# 提取cookie,添加到授权cookie中auth_cookies['TIEBA_USERTYPE'] = tieba_r.cookies['TIEBA_USERTYPE']# 获取重定向地址,此时为passport.baidu.com,访问改地址后会再次重定向pass_url = tieba_r.headers['Location']pass_r = requests.get(pass_url, headers=TieBa.passport_headers, cookies=passport_authcookies,allow_redirects=False)# 获取headers中的贴吧STOKEN,并设置进auth_cookietieba_stoken_url = pass_r.headers['Location']tieba_stoken_r = requests.get(tieba_stoken_url, headers=config.headers['tieba_headers'], cookies=passport_authcookies,allow_redirects=False)STOKEN = re.search(r'STOKEN=(\w*[^;])', tieba_stoken_r.headers['Set-Cookie']).group(1)passport_authcookies['STOKEN'] = STOKENreturn passport_authcookies

贴吧签到

当我们获取到贴吧的授权cookie后,利用它访问贴吧首页即可获取相关信息:
第一步: 访问贴吧首页地址https://tieba.baidu.com/index.html,获取我关注的贴吧列表。
访问首页时,我关注的贴吧列表如下图,默认只显示8个,超过8个时点击查看更多按钮,查看其他的列表。

当点击查看更多按钮时,通过浏览器开发者模式追踪可以发现,浏览器没有发送任何请求,所以可以断定,关注的贴吧列表信息已经提前加载好了,我们的信息是通过js展示上去的。查看网页源码,可以找出相关信息,具体如下图。图中的is_sign字段就代表是否已经签到的信息。

通过正则表达式对贴吧列表信息进行提取,将其封装为一个函数:

def get_mytbdict(tieba_authcookies):tieba_url = 'https://tieba.baidu.com/index.html'# 读取百度账号的授权cookiewith open('auth_cookies.txt', 'r') as f:passport_cookiesstr = f.read()passport_authcookies = json.loads(passport_cookiesstr)# 获取贴吧的授权cookieauth_cookies = get_tieba_authcookies(passport_authcookies)# 利用新token请求首页,获取关注的贴吧列表tieba_index_r = requests.get(tieba_url, cookies=auth_cookies,   headers=config.headers['tieba_headers'])content = tieba_index_r.text#正则表达式提取贴吧列表pattern = re.compile(r"{\"user_id\"[^}]*\"is_sign\":\d}")tbinfo_list = pattern.findall(content)# mytb存放贴吧信息,key是贴吧的ID,value是贴吧的名称mytb ={}for item in tbinfo_list:json_item = json.loads(item)forum_name = json_item['forum_name']forum_id = json_item['forum_id']mytb[forum_id]=forum_namereturn mytb

第二步: 随便进入一个未签到的贴吧,点击签到按钮,可以发现它发送了一个add请求。


这个请求有三个参数,一个是ie,这个是对响应内容采用的编码,一个是tbs,经测试,这个值可以固定,也可以从页面原码中获取,最后一个是kw,这个是贴吧名称。明确这些信息以后,就可以利用代码进行签到:

def auto_sign():mytb_names = list(get_mytbdict(auth_cookies).values())# 签到for tb_name in mytb_names:sign_url = 'https://tieba.baidu.com/sign/add'sign_data = {'ie': 'utf-8','kw': tb_name,'tbs': '6868ce0283f2fb151561865643'}sign_res=requests.post(sign_url, data=sign_data, cookies=auth_cookies, headers=config.headers['tieba_headers'])print(sign_res.text)

完整代码

import config
import requests
import re
import json
import time
from pyquery import PyQuery as pq
# 获取毫秒级时间戳
def get_cur_timestamp():return int(round((time.time()) * 1000))class TieBa:tieba_headers = config.headers['tieba_headers']passport_headers = config.headers['passport_headers']@staticmethoddef auto_sign():with open('auth_cookies.txt', 'r') as f:cookiesstr = f.read()passport_authcookies = json.loads(cookiesstr)auth_cookies=TieBa.get_tieba_authcookies(passport_authcookies)mytb_names = list(TieBa.get_mytbdict(auth_cookies).values())# 签到for tb_name in mytb_names:sign_url = 'https://tieba.baidu.com/sign/add'sign_data = {'ie': 'utf-8','kw': tb_name,'tbs': '6868ce0283f2fb151561865643'}sign_res=requests.post(sign_url, data=sign_data, cookies=auth_cookies, headers=config.headers['tieba_headers'])print(sign_res.text)@staticmethoddef get_tieba_authcookies(passport_authcookies):# 获取授权cookiewith open('auth_cookies.txt', 'r') as f:cookiesstr = f.read()auth_cookies = json.loads(cookiesstr)# 首次访问贴吧首页时会重定向到passprot.baidu.comtieba_url = 'https://tieba.baidu.com/index.html'tieba_r = requests.get(tieba_url, cookies=passport_authcookies, headers=TieBa.tieba_headers,allow_redirects=False)# 提取cookie,添加到授权cookie中auth_cookies['TIEBA_USERTYPE'] = tieba_r.cookies['TIEBA_USERTYPE']# 获取重定向地址,此时为passport.baidu.com,访问改地址后会再次重定向pass_url = tieba_r.headers['Location']pass_r = requests.get(pass_url, headers=TieBa.passport_headers, cookies=passport_authcookies,allow_redirects=False)# 获取headers中的贴吧STOKEN,并设置进auth_cookietieba_stoken_url = pass_r.headers['Location']tieba_stoken_r = requests.get(tieba_stoken_url, headers=TieBa.tieba_headers, cookies=passport_authcookies,allow_redirects=False)STOKEN = re.search(r'STOKEN=(\w*[^;])', tieba_stoken_r.headers['Set-Cookie']).group(1)passport_authcookies['STOKEN'] = STOKENreturn passport_authcookies@staticmethoddef get_mytbdict(tieba_authcookies):tieba_url = 'https://tieba.baidu.com/index.html'with open('auth_cookies.txt', 'r') as f:cookiesstr = f.read()passport_authcookies = json.loads(cookiesstr)auth_cookies = TieBa.get_tieba_authcookies(passport_authcookies)# 利用新token请求首页,获取关注的贴吧列表tieba_index_r = requests.get(tieba_url, cookies=auth_cookies, headers=config.headers['tieba_headers'])content = tieba_index_r.textpattern = re.compile(r"{\"user_id\"[^}]*\"is_sign\":\d}")tbinfo_list = pattern.findall(content)# 用set存放提取出的贴吧列表,防止重复mytb ={}for item in tbinfo_list:json_item = json.loads(item)forum_name = json_item['forum_name']forum_id = json_item['forum_id']mytb[forum_id]=forum_namereturn mytbif __name__ == '__main__':TieBa.auto_sign()

python贴吧自动签到,解放你的双手相关推荐

  1. python实现app自动签到器_利用Python实现App自动签到领取积分

    要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化.但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了. 有需要Python学习资料的小伙伴吗?小编整理[ ...

  2. 用python写一个手机app签到脚本_利用Python实现App自动签到领取积分

    要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化.但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了. 有需要Python学习资料的小伙伴吗?小编整理[ ...

  3. python实现app自动签到器_Python实现自动签到脚本代码示例

    本篇文章小编给大家分享一下Python实现自动签到脚本代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 开发环境 : Windows10 + s ...

  4. Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)

    T00ls 每日签到是可以获取 TuBi 的,由于常常忘记签到,导致损失了很多 TuBi .于是在 T00ls 论坛搜索了一下,发现有不少大佬都写了自己的签到脚本,签到功能实现.定时任务执行以及签到提 ...

  5. 用python做一个自动签到程序

    背景:疫情期间,学校要求每天在上午10点之前填报信息.有时容易忘记填报,就会受辅导员惩罚. 我们用"i至诚"填报,所以这里用这个例子来图文演示如何实现自动签到功能. 程序中使用到的 ...

  6. 太赞了! 菜鸟利用Python实现网站自动签到

    前情提要 小五收藏了一些论坛网站,经常需要自己登录签到,以此来获得积分金币等等. 步骤倒是并不复杂,只需要填写账号密码登录,然后点击签到即可. 但天天手动太容易忘了这件事啦.毕竟我们都会用python ...

  7. python实现app自动签到器_Python实现自动签到脚本功能

    实训课期间忙里偷闲的学习了python的selenium包,唯一一点不好是要自己去查英文文档,明摆着欺负我这种英语不好的,想着用谷歌翻译一下,代码也给我翻译了,不知道是几个意思. 大二的时候就让我们做 ...

  8. python实现每天自动签到领积分

    自动签到的python脚本源码 新建一个python文件,checkin.py,保存到电脑上某个位置,我这里保存到的是E:\pyproject\checkin.py # 引入3个包 from sele ...

  9. python b站自动签到_搭建自动签到服务

    上上篇文章已经交代了怎么升级python的版本,难道你以为仅仅拿来B站挂机吗?是时候再做一点正事了!!!于是我们来搭建自动签到平台.框架是现成的,由 binux 创造,地址在这里. 作者已经搭建了一个 ...

最新文章

  1. Python3.5源码分析-内建模块builtins初始化
  2. word文档基本编辑功能_【读者培训】Word在编辑长文档时的基本应用
  3. HDOJ1016 素数环(DFS)
  4. 一步一步实现iOS QQ第三方登录
  5. [ZJOI2010]数字计数
  6. Error encountered when performing Introspect schema xxx 错误的解决方法
  7. php mysql foreach_php foreach输出两次
  8. codeforces 385C Bear and Prime Numbers
  9. 让子弹飞,零成本让你的网站更快一点,boxopened http/3 (QUIC) 协议实战
  10. UVA10494 If We Were a Child Again【大数除法】
  11. go语言 mysql时间对比_go时间比较 - Go语言中文网 - Golang中文社区
  12. python手机端抢票大麦网_手把手教你用python抢票回家过年 !
  13. 时序数据库QuestDB和TimescaleDB对比
  14. mac升级Monterey12.3 AccessClient打不开
  15. 设计师们如何高调拒绝免费工作
  16. 用了TCP协议,就一定不会丢包嘛?
  17. HTTPS能否避免流量劫持?
  18. 教育机构课程顾问常见黑话大全
  19. xml 压缩_研究最新的XML压缩技术
  20. 持久化技术——游戏玩家信息管理(基于 SQLite)

热门文章

  1. 苹果7p服务器维护中,苹果7p无服务怎么解决
  2. 解决谷歌无法加载扩展程序
  3. 微信公众号的代码块插入,及一键排版
  4. 微信小程序-后台使用富文本编辑器返回数据,小程序编译富文本编辑器返回的数据
  5. 无线蜂窝通信模组是什么?
  6. 如何用c语言串口通讯,串口通信入门
  7. Java网课|apiscanner
  8. 正方教务系统爬虫实现
  9. 压敏电阻原理、参数、选型
  10. 免费的ppt模板百度网盘资源