Python:百度贴吧实现自动化签到

早知道,还是python。

Github项目仓库在这。

相关API

签到+贴吧列表

签到分为两个接口,PC端签到一次经验+2,而移动端签到则是一次经验+6。该用哪个接口已经很明显了。不过这里还是列出PC端的签到API。

# PC端签到接口
# sign_url = "https://tieba.baidu.com/sign/add"# 移动端签到接口
# sign_url = "https://c.tieba.baidu.com/c/c/forum/sign"

贴吧列表如果是通过“爱逛的吧”去获取,很明显不全。所以我是通过爬取“关注的吧”页面来获取贴吧列表的。

https://tieba.baidu.com/i/i/forum?&pn=1
https://tieba.baidu.com/i/i/forum?&pn=2
...

 

实现思路

获取列表+发起签到请求

获取列表前,需要BDUSS+STOKEN拿到tbs。在发帖和签到的时候payload里头都会包含这个tbs,没有就发不出去,估计是用户标识符一类的东西。

tbs_url = "https://tieba.baidu.com/dc/common/tbs"
response = json.loads(requests.get(tbs_url, cookies={"BDUSS": BDUSS, "STOKEN": STOKEN}).text)
login_state = response["is_login"]
if login_state == 1:logger.debug("登录成功")
else:logger.debug(login_state)raise Exception("登录失败")
return response["tbs"], BDUSS, STOKEN

获取贴吧列表比较简单粗暴,Cookies带上BDUSS和STOKEN,再用get方法获取页面的html,再用正则表达式去拿出贴吧名和对应的贴吧链接。

<tr><td><a href="/f?kw=%C9%EE%DB%DA%BC%BC%CA%F5%B4%F3%D1%A7" title="深圳技术大学">深圳技术大学</a></td><td><a class="cur_exp" target="_blank"href="/f/like/level?kw=%C9%EE%DB%DA%BC%BC%CA%F5%B4%F3%D1%A7&lv_t=lv_nav_intro">17788</a></td><td><a style="display:block;" class="like_badge badge_lv3_1" title="13级会员" target="_blank"href="/f/like/level?kw=%C9%EE%DB%DA%BC%BC%CA%F5%B4%F3%D1%A7&lv_t=lv_nav_intro"><div class="like_badge_title">内牛满面</div><div class="like_badge_lv">13</div></a></td><td><spanonclick="ForumManager.undo_like(this.getAttribute('balvid'), this.getAttribute('balvname'), this.getAttribute('tbs'))"balvid="23311541" balvname="%C9%EE%DB%DA%BC%BC%CA%F5%B4%F3%D1%A7" tbs="a527b042d6559d351726813316"><imgclass="pt" src='//tb1.bdstatic.com/tb/static-member/img/close.gif' /></span></td>
</tr>

不过用PC端的“关注的吧”接口除了bduss之外,还必须得带上stoken才能拿到数据。拿到的贴吧列表存不存到本地,看个人需求。我是选择全部存到本地json。

# 从百度贴吧获取关注的贴吧列表
# 结果保存到tieba_dict.json文件中
def get_tieba_dict():tieba_dict = {}_, BDUSS, STOKEN = get_cookies()Cookies = {"BDUSS": BDUSS,"STOKEN": STOKEN,}page = 1tieba_sum = 0while True:mylike_url = "https://tieba.baidu.com/f/like/mylike?&pn=" + str(page)try:response = requests.get(mylike_url, cookies=Cookies)except Exception as e:raise Exception("请求失败:" + str(e))data = extract_data(response.text)if data == []:breakfor i in data:tieba_name = re.search(r"<a.*?>(.*?)</a>", i).group(1)tieba_url = prefix + re.search(r"href=\"(.*?)\"", i).group(1)if tieba_name is not None:tieba_sum += 1tieba_dict[tieba_name] = tieba_urlpage += 1with open("tieba_dict.json", "w", encoding="utf-8") as f:json.dump(tieba_dict, f, ensure_ascii=False)

发起签到请求分为两部分,payload需要带上贴吧名和tbs标识。如果用的移动端签到接口还需要带上它们md5加密后的十六进制结果。我调这接口的时候一直报“未知错误”,后面参考了其他repo才发现要带上这么个参数。

sign_str = f"kw={tieba_name}tbs={tbs}tiebaclient!!!"
sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest()
payload = {"kw": tieba_name,"tbs": tbs,"sign": sign,
}

Cookies只需要bduss,stoken只有在获取贴吧列表时才用得到。

Cookies = {"BDUSS": BDUSS,
}
resp = requests.post(sign_url,cookies=Cookies,data=payload,
)

如果签到成功,返回的json会包含user_info。失败的话直接就是error_code,可以在这做个校验。比如GTA5吧,女权吧这种被关闭的吧,如果直接调接口签到,就会在这报错。

    if "user_info" in resp.json():logger.debug("签到成功:" + tieba_name + "吧")return Trueelif resp.json()["error_code"] == "160002":# 已签到logger.error("签到失败:" + tieba_name + "吧" + " 失败原因:" + resp.json()["error_msg"])else:logger.error("签到失败:" + tieba_name + "吧")logger.debug(str(resp.json()))logger.error("失败原因:" + resp.json()["error_msg"]

目前不知道签到过快会怎么样,总之我加了1~5秒的随机。貌似PC端才会检测签到过快,有时候我一个小时内连续签到98个贴吧就会触发机制,导致当天内的其他在PC端上签到,都需要带上captcha验证码。移动端签到不受影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149090.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

时序预测 | Python实现KAN+LSTM时间序列预测

时序预测 | Python实现KAN+LSTM时间序列预测 目录 时序预测 | Python实现KAN+LSTM时间序列预测预测效果基本介绍程序设计预测效果 基本介绍 时序预测 | KAN+LSTM时间序列预测(Python) KAN作为这两年最新提出的机制,目前很少人用,很适合作为时间序列预测的创新点,可以结合…

python全栈开发《37.列表(元组)的count函数》

元组的count函数的功能和用法与列表的count函数完全一致。 1.count的功能 返回当前列表中某个成员的个数。 2.count的用法 fruits [苹果,西瓜,水蜜桃,西瓜,雪梨] count fruits.count(西瓜) print(count) 运行结果&#xff1a; 2 注意&#xff1a;列表的内置函数count拿到需要…

【读书笔记-《30天自制操作系统》-24】Day25

本篇内容也比较简单。首先开发了蜂鸣器的API&#xff0c;然后增加更多的颜色显示。为了同时运行两个应用程序&#xff0c;又增加了一个命令行窗口。 1. 蜂鸣器 首先是增加蜂鸣器的功能。 蜂鸣器与定时器一样&#xff0c;是由PIT控制的。 蜂鸣器发声的控制&#xff1a; 音高…

Linux:Bash中的文件描述符详解

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的所有进程&#xff0c;都拥有自己的文件描述符(File Descriptor, FD)&#xff0c;它是操作系统在管理进程和文件时的一种抽象概念。每个文件描述符由一个非负整…

开关电源自动测试系统的测试设备与特色

突破传统测试系统的操作维护困难等限制&#xff0c;NSAT-8000开关电源自动测试系统以其开放式架构和0代码模式&#xff0c;带来了不一样的开关电源自动化测试体验。 开关电源自动测试系统的测试设备 开关电源自动测试系统核心硬件包括&#xff1a;可编程交直流电源、电子负载、…

使用 HFD 加快 Hugging Face 模型和数据集的下载,解决443报错

Hugging Face 提供了丰富的预训练模型和数据集&#xff0c;而且使用 Hugging Face 提供的 from_pretrained() 方法可以轻松加载它们&#xff0c;但是&#xff0c;模型和数据集文件通常体积庞大&#xff0c;用默认方法下载起来非常花时间。 本文将指导你如何使用 HFD&#xff08…

小新 Pro13 + windows 11 家庭中文版(网络适配器及地址配置)

网络适配器位置及地址配置 网络适配器简介 计算机系统&#xff1a;网络适配器详解&#xff0c;全面剖析 网络适配器位置 不同于win11之前的版本&#xff0c;win11的网络适配器的位置如下&#xff1a; 1、右键 右下角的网络图标-》网络和internet设置-》高级网络设置-》可以…

冒泡排序bubble sort

冒泡排序&#xff08;bubble sort&#xff09;通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样&#xff0c;因此得名冒泡排序。 算法流程 def bubble_sort(nums: list[int]):"""冒泡排序"""n len(nums)# 外循环&…

46.哀家要长脑子了!

1.435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a;动态规划 实际上本质就是找最长的无重叠子序列&#xff0c;那么我们可以遍历这个区间的集合&#xff0c;只要前一个区间的右端点是小于等于后一个区间的左端点&#xff0c;那么这两个区间就不是重…

如何将Excel表格嵌入Web网页在线预览、编辑并保存到自己服务器上?

猿大师办公助手作为一款专业级的网页编辑Office方案&#xff0c;不仅可以把微软Office、金山WPS和永中Office的Word文档内嵌到浏览器网页中实现在线预览、编辑保存等操作&#xff0c;还可以把微软Office、金山WPS和永中Office的Excel表格实现网页中在线预览、编辑并保存到服务器…

虚拟机:4、配置12.5的cuda和gromacs

前言&#xff1a;本机环境是win11&#xff0c;通过wsl2安装了ubuntu实例并已实现gpu直通&#xff0c;现在需要下载12.5的cuda 一、查看是否有gpu和合适的cuda版本 在ubuntu实例中输入 nvidia-smi输出如下&#xff1a; 说明该实例上存在gpu驱动&#xff0c;且适合的CUDA版本…

硬件测试(五):信号补偿

一、简介 高速信号的趋肤效应以及传输线的介质损耗&#xff0c;使信号在传输过程中衰减很大&#xff0c;导致最后得到的信号失真。为了在接收终端能得到比较好的波形&#xff0c;就需要对受损的信号进行补偿&#xff0c;常用的补偿技术有&#xff1a;预加重、去加重和均衡三种信…

思科安全网络解决方案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

告别xx搜索,我用这个AI工具...

点击“终码一生”&#xff0c;关注&#xff0c;置顶公众号 每日技术干货&#xff0c;第一时间送达&#xff01; 前段时间&#xff0c;逛 GitHub 的时候发现了一个评估报告&#xff0c;对AI搜索引擎进行了详细的准确性测试&#xff0c;覆盖6种主流语言和5类场景。 其中&#xf…

苍穹外卖上半部分总结

苍穹外卖一个很经典的项目 虽然已经烂大街&#xff0c;但项目依旧是很优秀&#xff0c;并且代码十分规范&#xff0c;很值得学习。 前置介绍 niginx反向代理 前端和后端的url请求不一致的原因&#xff1a;前端是请求到nginx服务器&#xff0c;再由nginx服务器转发到后端 ngi…

箭头与数字识别系统源码分享

箭头与数字识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

《CUDA编程》1.GPU硬件与CUDA环境搭建

1 GPU 介绍 GPU&#xff08;graphics processing unit&#xff09;&#xff0c;意为图形处理器&#xff0c;也被称为显卡&#xff08;graphics card&#xff09;。GPU的浮点数运算峰值就比同时期的CPU高一个量级&#xff1b;GPU的内存带宽峰值也比同时期的CPU高一个量级。 CP…

数据结构 - 排序算法

一.直接插入排序 /*** description: 直接插入排序算法* param - a : 要进行排序的数组的指针* return : 无 */ void Seqsort(int *a) {/* i 用于表示无序部分的第一个元素的下标 &#xff0c; j 用于表示有序部分的最后一个元素的下标 &…

如何登录通义灵码,快速开启AI编码之旅?

通义灵码个人版开发者可以使用阿里云账号登录通义灵码 IDE 端插件&#xff0c;本文介绍个人版开发者登录 IDE 端插件的操作指南。 登录通义灵码 步骤 1&#xff1a;准备工作 已成功注册阿里云账号&#xff0c;具体操作可参考&#xff1a;账号注册&#xff08;PC端&#xff09;…

15.多线程概述(下篇)

目录 1.进程与线程 2.实现多线程方式一&#xff1a;继承Thread类【应用】 3.实现多线程方式二&#xff1a;实现Runnable接口【应用】 4.实现多线程方式三&#xff1a;实现Callable接口【应用】 5.三种实现方式的对比与套路 6.设置和获取线程名称/线程对象【应用】 7.线程优先级…