下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:8832
代码说明:这个微博自动发帖机器人包含三个主要模块:1) 微博机器人核心功能模块,处理登录和发帖;2) 内容生成器模块,基于马尔可夫链算法自动生成微博内容;3) 主程序模块,设置定时任务和运行逻辑。使用时需要准备语料库文件corpus.txt和图片目录pics。
import requests
import json
import time
import random
from datetime import datetime
class WeiboBot:
def __init__(self, username, password):
self.session = requests.Session()
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://weibo.com/'
}
self.username = username
self.password = password
self.login_url = 'https://passport.weibo.cn/sso/login'
self.post_url = 'https://weibo.com/aj/mblog/add?ajwvr=6'
def login(self):
login_data = {
'username': self.username,
'password': self.password,
'savestate': '1',
'r': 'https://weibo.com/',
'ec': '0',
'pagerefer': '',
'entry': 'mweibo',
'wentry': '',
'loginfrom': '',
'client_id': '',
'code': '',
'qq': '',
'mainpageflag': '1',
'hff': '',
'hfp': ''
}
response = self.session.post(self.login_url, data=login_data, headers=self.headers)
if response.status_code == 200:
print("登录成功!")
return True
else:
print("登录失败!")
return False
def post_weibo(self, content, pic_path=None):
post_data = {
'location': 'v6_content_home',
'text': content,
'appkey': '',
'style_type': '1',
'pic_id': '',
'tid': '',
'pdetail': '',
'mid': '',
'isReEdit': 'false',
'rank': '0',
'rankid': '',
'module': 'stissue',
'pub_source': 'main_',
'pub_type': 'dialog',
'_t': '0'
}
if pic_path:
files = {'pic': open(pic_path, 'rb')}
response = self.session.post(self.post_url, data=post_data, files=files, headers=self.headers)
else:
response = self.session.post(self.post_url, data=post_data, headers=self.headers)
if response.status_code == 200:
print("微博发布成功!")
return True
else:
print("微博发布失败!")
return False
def auto_post_schedule(self, contents, interval=3600, random_range=600):
while True:
try:
content = random.choice(contents)
self.post_weibo(content)
sleep_time = interval + random.randint(-random_range, random_range)
print(f"下次发帖将在 {sleep_time//60} 分钟后...")
time.sleep(sleep_time)
except Exception as e:
print(f"发生错误: {e}")
time.sleep(300)
random
import jieba
from collections import Counter
class ContentGenerator:
def __init__(self, corpus_file):
with open(corpus_file, 'r', encoding='utf-8') as f:
self.corpus = f.read()
self.words = list(jieba.cut(self.corpus))
self.word_pairs = [(self.words[i], self.words[i+1]) for i in range(len(self.words)-1)]
self.word_counter = Counter(self.words)
def generate_sentence(self, length=15):
current_word = random.choice(list(self.word_counter.keys()))
sentence = [current_word]
for _ in range(length-1):
possible_next = [pair[1] for pair in self.word_pairs if pair[0] == current_word]
if not possible_next:
current_word = random.choice(list(self.word_counter.keys()))
else:
current_word = random.choice(possible_next)
sentence.append(current_word)
return ''.join(sentence)
def generate_weibo_content(self, num=10):
contents = []
for _ in range(num):
sentence_num = random.randint(1, 3)
content = ' '.join([self.generate_sentence(random.randint(5, 20)) for _ in range(sentence_num)])
contents.append(content)
return contents
weibo_bot import WeiboBot
from content_generator import ContentGenerator
import os
import schedule
import time
def main():
# 初始化
username = "your_weibo_account"
password = "your_password"
corpus_file = "corpus.txt"
# 创建内容生成器
generator = ContentGenerator(corpus_file)
contents = generator.generate_weibo_content(50)
# 创建微博机器人
bot = WeiboBot(username, password)
if not bot.login():
print("登录失败,程序退出")
return
# 定时发帖
def job():
content = random.choice(contents)
print(f"准备发布微博: {content}")
if random.random() < 0.3: # 30%概率带图片
pic_dir = "pics"
if os.path.exists(pic_dir) and os.listdir(pic_dir):
pic_path = os.path.join(pic_dir, random.choice(os.listdir(pic_dir)))
bot.post_weibo(content, pic_path)
else:
bot.post_weibo(content)
else:
bot.post_weibo(content)
# 设置定时任务
schedule.every(2).hours.do(job)
print("微博自动发帖机器人已启动...")
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
main()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。