首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >微博关注脚本,微博采集评论工具,关注点赞私信插件

微博关注脚本,微博采集评论工具,关注点赞私信插件

原创
作者头像
用户11744395
发布2025-07-17 09:02:31
发布2025-07-17 09:02:31
2870
举报

下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133

这个微博自动化工具集包含完整的登录、关注、评论采集、点赞和私信功能,采用模块化设计,包含配置文件和工具函数。使用时请遵守微博平台规则,合理设置操作间隔时间。

代码语言:txt
复制

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 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档