下载地址:https://www.pan38.com/yun/share.php?code=JCnzE 提取密码:1133
这个代码实现了贴吧自动发帖、自动回复、获取帖子列表等功能。主要使用了requests库进行网络请求,BeautifulSoup解析HTML。代码包含完整的类实现和示例用法,但请注意这仅用于技术学习,实际使用可能违反贴吧用户协议。使用时需要替换有效的百度Cookie。
import time
import random
import requests
from bs4 import BeautifulSoup
class TiebaAuto:
def init(self, cookie):
self.session = requests.Session()
self.headers = {
'User-Agent': 'Mozilla/5.0',
'Cookie': cookie
}
self.base_url = 'https://tieba.baidu.com'
def get_tbs(self):
url = f"{self.base_url}/dc/common/tbs"
resp = self.session.get(url, headers=self.headers)
return resp.json().get('tbs', '')
def get_fid(self, forum_name):
url = f"{self.base_url}/f?kw={forum_name}"
resp = self.session.get(url, headers=self.headers)
soup = BeautifulSoup(resp.text, 'html.parser')
fid = soup.find('input', {'name': 'fid'}).get('value')
return fid
def create_post(self, forum_name, title, content):
fid = self.get_fid(forum_name)
tbs = self.get_tbs()
data = {
'kw': forum_name,
'fid': fid,
'tid': '',
'vcode_md5': '',
'title': title,
'content': content,
'rich_text': '1',
'tbs': tbs,
'ie': 'utf-8'
}
url = f"{self.base_url}/f/commit/post/add"
resp = self.session.post(url, data=data, headers=self.headers)
return resp.json()
def reply_post(self, forum_name, tid, content):
tbs = self.get_tbs()
data = {
'kw': forum_name,
'fid': self.get_fid(forum_name),
'tid': tid,
'content': content,
'anonymous': '0',
'tbs': tbs,
'ie': 'utf-8'
}
url = f"{self.base_url}/f/commit/post/add"
resp = self.session.post(url, data=data, headers=self.headers)
return resp.json()
def get_threads(self, forum_name, page=1):
url = f"{self.base_url}/f?kw={forum_name}&pn={(page-1)*50}"
resp = self.session.get(url, headers=self.headers)
soup = BeautifulSoup(resp.text, 'html.parser')
threads = []
for item in soup.find_all('div', class_='threadlist_title'):
a_tag = item.find('a')
if a_tag:
threads.append({
'title': a_tag.get('title'),
'tid': a_tag.get('href').split('/')[-1]
})
return threads
def auto_reply(self, forum_name, content, count=5):
threads = self.get_threads(forum_name)
results = []
for i in range(min(count, len(threads))):
tid = threads[i]['tid']
result = self.reply_post(forum_name, tid, content)
results.append(result)
time.sleep(random.randint(5, 15))
return results
def auto_create_posts(self, forum_name, titles, contents):
if len(titles) != len(contents):
raise ValueError("Titles and contents must have same length")
results = []
for title, content in zip(titles, contents):
result = self.create_post(forum_name, title, content)
results.append(result)
time.sleep(random.randint(30, 60))
return results
if name == 'main':
# 示例用法
cookie = "您的百度Cookie"
bot = TiebaAuto(cookie)
# 自动发帖
titles = ["测试帖子1", "测试帖子2"]
contents = ["这是第一个测试内容", "这是第二个测试内容"]
bot.auto_create_posts("python", titles, contents)
# 自动回复
bot.auto_reply("python", "自动回复测试内容")