Python中如何实现微博用户信息分析并存储到MySQL数据库
可以爬取微博用户个人资料以及动态信息。
项目地址: https://github.com/starFalll/Spider
数据分析:
- 生成词云
- 统计词频
- 统计活跃时间
- 使用 LDA 构建了微博主题模型
- 更多功能...
UI:
- 生成良好的 UI 数据分析与展示界面
Python中如何实现微博用户信息分析并存储到MySQL数据库
5 回复
源码里面注释写得很清楚,另外 lz 也写了一篇文章 爬虫实战(一):爬取微博用户信息
import requests
import json
import pymysql
from datetime import datetime
import time
class WeiboUserAnalyzer:
def __init__(self, mysql_config):
"""
初始化数据库连接
mysql_config格式: {
'host': 'localhost',
'user': 'root',
'password': 'password',
'database': 'weibo_analysis'
}
"""
self.db = pymysql.connect(**mysql_config)
self.cursor = self.db.cursor()
self.create_table()
def create_table(self):
"""创建用户信息表"""
sql = """
CREATE TABLE IF NOT EXISTS weibo_users (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(50) UNIQUE,
screen_name VARCHAR(100),
gender VARCHAR(10),
followers_count INT,
friends_count INT,
statuses_count INT,
verified BOOLEAN,
verified_type INT,
description TEXT,
location VARCHAR(100),
created_at DATETIME,
last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_followers (followers_count)
)
"""
self.cursor.execute(sql)
self.db.commit()
def get_user_info(self, user_id, access_token):
"""
获取微博用户信息(需要微博API权限)
实际使用时需要替换为有效的API调用
"""
# 这里模拟API调用,实际需要替换为真实的微博API
headers = {
'Authorization': f'Bearer {access_token}'
}
# 模拟数据 - 实际应该调用微博API
# url = f'https://api.weibo.com/2/users/show.json?uid={user_id}'
# response = requests.get(url, headers=headers)
# return response.json()
# 模拟返回数据
return {
'id': user_id,
'screen_name': f'用户_{user_id}',
'gender': 'm',
'followers_count': 1000,
'friends_count': 200,
'statuses_count': 500,
'verified': True,
'verified_type': 0,
'description': '这是一个测试用户',
'location': '北京',
'created_at': '2015-03-12 10:00:00'
}
def analyze_user(self, user_data):
"""分析用户数据"""
analysis = {
'user_id': user_data['id'],
'screen_name': user_data['screen_name'],
'gender': '男' if user_data.get('gender') == 'm' else '女',
'followers_count': user_data['followers_count'],
'friends_count': user_data['friends_count'],
'statuses_count': user_data['statuses_count'],
'verified': bool(user_data.get('verified', False)),
'verified_type': user_data.get('verified_type', -1),
'description': user_data.get('description', ''),
'location': user_data.get('location', ''),
'created_at': datetime.strptime(user_data['created_at'], '%Y-%m-%d %H:%M:%S')
if 'created_at' in user_data else datetime.now()
}
return analysis
def save_to_mysql(self, user_analysis):
"""保存分析结果到MySQL"""
sql = """
INSERT INTO weibo_users
(user_id, screen_name, gender, followers_count, friends_count,
statuses_count, verified, verified_type, description, location, created_at)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
screen_name = VALUES(screen_name),
followers_count = VALUES(followers_count),
friends_count = VALUES(friends_count),
statuses_count = VALUES(statuses_count),
verified = VALUES(verified),
description = VALUES(description),
location = VALUES(location)
"""
values = (
user_analysis['user_id'],
user_analysis['screen_name'],
user_analysis['gender'],
user_analysis['followers_count'],
user_analysis['friends_count'],
user_analysis['statuses_count'],
user_analysis['verified'],
user_analysis['verified_type'],
user_analysis['description'],
user_analysis['location'],
user_analysis['created_at']
)
try:
self.cursor.execute(sql, values)
self.db.commit()
print(f"用户 {user_analysis['screen_name']} 数据保存成功")
return True
except Exception as e:
print(f"保存失败: {e}")
self.db.rollback()
return False
def process_user(self, user_id, access_token):
"""处理单个用户:获取->分析->存储"""
# 获取用户数据
user_data = self.get_user_info(user_id, access_token)
# 分析用户数据
user_analysis = self.analyze_user(user_data)
# 存储到数据库
self.save_to_mysql(user_analysis)
return user_analysis
def close(self):
"""关闭数据库连接"""
self.cursor.close()
self.db.close()
# 使用示例
if __name__ == "__main__":
# MySQL配置
mysql_config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'weibo_analysis',
'charset': 'utf8mb4'
}
# 微博API访问令牌(需要申请)
access_token = "your_weibo_access_token"
# 创建分析器实例
analyzer = WeiboUserAnalyzer(mysql_config)
# 处理用户(示例用户ID)
user_ids = ['123456789', '987654321']
for user_id in user_ids:
try:
result = analyzer.process_user(user_id, access_token)
print(f"处理完成: {result['screen_name']}")
time.sleep(1) # 避免请求过快
except Exception as e:
print(f"处理用户 {user_id} 时出错: {e}")
# 关闭连接
analyzer.close()
这个实现包含了几个关键部分:
- 数据库操作:使用pymysql连接MySQL,创建专门存储用户信息的表
- 数据获取:通过微博API获取用户信息(示例中为模拟数据)
- 数据分析:提取关键字段并进行简单处理
- 数据存储:使用INSERT…ON DUPLICATE KEY UPDATE实现插入或更新
注意:
- 实际使用时需要申请微博开放平台API权限
- 数据库表设计包含了用户基本信息和分析常用字段
- 使用utf8mb4字符集支持表情符号存储
建议:先申请微博API权限,然后根据实际需求调整字段和分析逻辑。
User-Agent 都写错了,楼主确定跑过???
#2 那个是之前随便加上去的,这个我在配置文件里面已经说了需要自己改
#2 代码全是我自己写的呀,不然 gif 图怎么来的,跑过很多次了

