使用Python实现百度贴吧自动签到功能
通过Python自动化完成百度贴吧每日签到,可有效提升用户活跃度。核心在于获取登录凭证并调用移动端签到接口。
关键接口说明
- 移动端签到接口:https://c.tieba.baidu.com/c/c/forum/sign
每次签到获得6点经验,推荐使用。 - PC端签到接口:https://tieba.baidu.com/sign/add
仅提供2点经验,不建议使用。
身份认证与TBS获取
在执行任何操作前,需先获取用户会话标识。通过以下接口获取tbs 值:
import requests
import json
def fetch_tbs():
url = "https://tieba.baidu.com/dc/common/tbs"
cookies = {"BDUSS": "your_BDUSS_here", "STOKEN": "your_STOKEN_here"}
response = requests.get(url, cookies=cookies)
data = response.json()
if data["is_login"] == 1:
return data["tbs"], cookies["BDUSS"], cookies["STOKEN"]
else:
raise Exception("登录状态异常")
获取关注的贴吧列表
从"我的关注"页面爬取所有贴吧信息,避免使用不完整或非实时的数据源。请求时需携带BDUSS 和 STOKEN。
import re
import json
def scrape_forum_list():
base_url = "https://tieba.baidu.com/f/like/mylike?&pn="
cookies = {"BDUSS": BDUSS, "STOKEN": STOKEN}
forum_dict = {}
page = 1
total_count = 0
while True:
url = base_url + str(page)
try:
resp = requests.get(url, cookies=cookies)
except Exception as e:
raise Exception(f"请求失败: {e}")
content = resp.text
matches = re.findall(r']*>(.*?)</tr>', content, re.DOTALL)
if not matches:
break
for item in matches:
name_match = re.search(r']*>(.*?)</a>', item)
link_match = re.search(r'href="([^"]+)"', item)
if name_match and link_match:
name = name_match.group(1).strip()
link = "https://tieba.baidu.com" + link_match.group(1)
forum_dict[name] = link
total_count += 1
page += 1
# 保存至本地文件
with open("forum_list.json", "w", encoding="utf-8") as f:
json.dump(forum_dict, f, ensure_ascii=False, indent=2)
print(f"共获取 {total_count} 个贴吧")
签到逻辑实现
调用签到接口时,需构造包含 kw(贴吧名称)、tbs 和加密签名的 payload。签名规则如下:
import hashlib
import time
import random
def generate_sign(kw, tbs):
raw_str = f"kw={kw}tbs={tbs}tiebaclient!!!"
return hashlib.md5(raw_str.encode('utf-8')).hexdigest()
def perform_sign(tieba_name, tbs):
sign_url = "https://c.tieba.baidu.com/c/c/forum/sign"
payload = {
"kw": tieba_name,
"tbs": tbs,
"sign": generate_sign(tieba_name, tbs)
}
cookies = {"BDUSS": BDUSS}
try:
response = requests.post(sign_url, cookies=cookies, data=payload)
result = response.json()
if "user_info" in result:
print(f"[✅] 签到成功:{tieba_name}")
return True
elif result.get("error_code") == "160002":
print(f"[⚠️] 已签到:{tieba_name} - {result.get('error_msg')}")
else:
print(f"[❌] 签到失败:{tieba_name} - {result.get('error_msg')}")
except Exception as e:
print(f"[❗] 请求异常:{e}")
return False
防封机制处理
为防止触发反作弊系统,建议在每次签到之间加入随机延迟:
import time
import random
for name in forum_dict.keys():
perform_sign(name, tbs)
wait_time = random.uniform(1, 5)
time.sleep(wait_time)
注意:频繁签到可能触发PC端风控,导致后续签到需验证验证码。移动端接口相对更稳定,适合批量操作。
相关文章
Linux crontab 详解
1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...
富文本里可以允许的 HTML 属性
一、所有标签默认允许的安全属性(极少)class (可选)id (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...
Mac 安装 Node.js 指南
方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...
Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签
在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...
Laravel 事件和监听器创建
在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...
自定义域名解析神器 dnsmasq
什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...
发表评论