下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
这个微博自动化工具集包含完整的登录、关注、评论采集、点赞和私信功能,采用模块化设计,包含配置文件和工具函数。使用时请遵守微博平台规则,合理设置操作间隔时间。
import requests
import json
import time
import random
from bs4 import BeautifulSoup
import re
from urllib.parse import quote
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 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Referer': 'https://weibo.com/'
}
self.username = username
self.password = password
self.login()
def login(self):
login_url = 'https://passport.weibo.cn/sso/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(login_url, headers=self.headers, data=data)
if response.json().get('retcode') == 20000000:
print("登录成功")
self.get_cookies()
else:
print("登录失败")
def get_cookies(self):
self.cookies = requests.utils.dict_from_cookiejar(self.session.cookies)
self.headers['X-XSRF-TOKEN'] = self.cookies.get('XSRF-TOKEN', '')
def follow_user(self, user_id):
url = f'https://weibo.com/ajax/friendships/create?uid={user_id}'
response = self.session.post(url, headers=self.headers)
if response.json().get('ok') == 1:
print(f"成功关注用户: {user_id}")
return True
print(f"关注失败: {response.text}")
return False
def collect_comments(self, weibo_id, count=100):
comments = []
page = 1
while len(comments) < count:
url = f'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id={weibo_id}&is_show_bulletin=2&is_mix=0&count=20&page={page}'
response = self.session.get(url, headers=self.headers)
data = response.json()
if not data.get('data'):
break
for comment in data['data']:
comments.append({
'id': comment['id'],
'text': comment['text'],
'user': comment['user']['screen_name'],
'time': comment['created_at']
})
page += 1
time.sleep(random.uniform(1, 3))
return comments[:count]
def like_weibo(self, weibo_id):
url = f'https://weibo.com/ajax/statuses/like?location=page_100505_home'
data = {
'id': weibo_id,
'attitude': 'heart',
'location': 'page_100505_home'
}
response = self.session.post(url, headers=self.headers, data=data)
if response.json().get('ok') == 1:
print(f"成功点赞微博: {weibo_id}")
return True
print(f"点赞失败: {response.text}")
return False
def send_private_message(self, user_id, content):
url = 'https://weibo.com/ajax/chat/create'
data = {
'text': content,
'uid': user_id
}
response = self.session.post(url, headers=self.headers, data=data)
if response.json().get('ok') == 1:
print(f"成功发送私信给用户: {user_id}")
return True
print(f"私信发送失败: {response.text}")
return False
def search_users(self, keyword, count=10):
users = []
url = f'https://s.weibo.com/user?q={quote(keyword)}'
response = self.session.get(url, headers=self.headers)
soup = BeautifulSoup(response.text, 'html.parser')
cards = soup.select('.card-user-b')
for card in cards[:count]:
user = {
'name': card.select_one('.name').get_text(strip=True),
'uid': re.search(r'uid=(\d+)', card.select_one('a')['href']).group(1),
'fans': card.select_one('.num').get_text(strip=True)
}
users.append(user)
return users
weibo_bot import WeiboBot
import time
import random
def main():
# 初始化机器人
bot = WeiboBot('your_username', 'your_password')
# 搜索用户并关注
keyword = "科技"
users = bot.search_users(keyword, 5)
for user in users:
if bot.follow_user(user['uid']):
time.sleep(random.uniform(5, 10))
# 采集热门微博评论
hot_weibo_id = "1234567890" # 替换为实际微博ID
comments = bot.collect_comments(hot_weibo_id, 50)
print(f"采集到{len(comments)}条评论")
# 点赞和私信
for i in range(3):
bot.like_weibo(hot_weibo_id)
time.sleep(random.uniform(3, 6))
# 给新关注的用户发送私信
for user in users[:3]:
message = f"你好@{user['name']},很高兴认识你!"
if bot.send_private_message(user['uid'], message):
time.sleep(random.uniform(10, 20))
if __name__ == "__main__":
main()
微博账号配置
ACCOUNTS = [
{
'username': 'your_username1',
'password': 'your_password1'
},
{
'username': 'your_username2',
'password': 'your_password2'
}
]
# 爬虫配置
CRAWL_CONFIG = {
'max_follow_per_day': 30,
'max_like_per_day': 50,
'max_message_per_day': 20,
'delay_range': (3, 10) # 随机延迟秒数
}
# 关键词配置
KEYWORDS = [
"科技",
"互联网",
"编程",
"人工智能",
"大数据"
]
# 代理配置
PROXIES = {
'http': 'http://your_proxy:port',
'https': 'http://your_proxy:port'
}
time
import random
import logging
from datetime import datetime
def setup_logger(name):
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 文件处理器
file_handler = logging.FileHandler(f'weibo_bot_{datetime.now().strftime("%Y%m%d")}.log')
file_handler.setFormatter(formatter)
# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
def random_delay(min_seconds, max_seconds):
delay = random.uniform(min_seconds, max_seconds)
time.sleep(delay)
return delay
def save_to_file(data, filename):
with open(filename, 'a', encoding='utf-8') as f:
if isinstance(data, dict):
json.dump(data, f, ensure_ascii=False, indent=2)
elif isinstance(data, list):
for item in data:
f.write(json.dumps(item, ensure_ascii=False) + '\n')
else:
f.write(str(data) + '\n')
def load_cookies(filename):
try:
with open(filename, 'r', encoding='utf-8') as f:
return json.load(f)
except FileNotFoundError:
return None
def save_cookies(cookies, filename):
with open(filename, 'w', encoding='utf-8') as f:
json.dump(cookies, f)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。