网站制作的地方内容营销
微博粉丝数据爬取
功能特性
- 🕸️ 智能爬取:自动获取用户粉丝和关注者的详细信息
- 📊 数据导出:将爬取的数据保存为CSV格式
- 📈 批量处理:支持同时爬取多个用户的数据
- 🔧 易于扩展:模块化设计,便于功能扩展
依赖库
import json # JSON数据解析
import requests # HTTP请求处理
import csv # CSV文件操作
import time # 时间控制
import math # 数学计算
核心函数详解
1. get_html(url)
- 网页内容获取函数
功能说明:
负责发送HTTP请求获取指定URL的页面内容,并实现基本的反爬虫措施。
参数:
url
(str): 要请求的目标URL
返回值:
str
: 返回页面的HTML文本内容
实现细节:
def get_html(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36","Referer": "https://weibo.com"}cookies = {"cookie": "你的Cookie"}response = requests.get(url, headers=headers, cookies=cookies)time.sleep(5) # 加上5s 的延时防止被反爬return response.text
关键技术点:
- User-Agent:模拟真实浏览器访问
- Referer设置:表明请求来源,增加可信度
- Cookie认证:需要登录后的有效Cookie
- 延时机制:每次请求间隔5秒,避免触发反爬虫
2. save_fans_data(data)
- 粉丝数据保存函数
功能说明:
将单个粉丝的数据追加保存到CSV文件中。
参数:
data
(dict): 包含粉丝信息的字典
数据字段:
title = ['uid', 'id', 'screen_name', 'description', 'followers_count', 'friends_count', 'statuses_count', 'gender']
实现逻辑:
def save_fans_data(data):title = ['uid', 'id', 'screen_name', 'description', 'followers_count', 'friends_count', 'statuses_count', 'gender']with open("fans_data.csv", "a", encoding="utf-8", newline="") as fi:fi = csv.writer(fi)fi.writerow([data[k] for k in title])
3. save_followers_data(data)
- 关注者数据保存函数
功能说明:
将单个关注者的数据追加保存到CSV文件中,功能与save_fans_data
相似。
输出文件:
- 文件名:
followers_data.csv
- 编码:UTF-8
- 模式:追加模式(append)
4. get_fans_data(id)
- 粉丝数据爬取函数
功能说明:
获取指定用户的所有粉丝信息,支持分页爬取。
参数:
id
(str): 目标用户的微博UID
工作流程:
-
获取总数量
url = "https://www.weibo.com/ajax/friendships/friends?relate=fans&page={}&uid={}&type=all&newFollowerCount=0" html = get_html(url.format(1, id)) response = json.loads(html) total_number = response['total_number']
-
计算页数并循环爬取
for page in range(1, math.ceil(total_number/20) + 1):# 每页最多20条数据html = get_html(url.format(page, id))response = json.loads(html)fans_list = response['users']
-
数据提取与保存
for fan in fans_list:data['uid'] = id # 目标用户IDdata['id'] = fan['id'] # 粉丝IDdata['screen_name'] = fan['screen_name'] # 粉丝昵称data['description'] = fan['description'] # 个性签名data['gender'] = fan['gender'] # 性别data['followers_count'] = fan['followers_count'] # 粉丝的粉丝数data['friends_count'] = fan['friends_count'] # 粉丝的关注数data['statuses_count'] = fan['statuses_count'] # 粉丝的微博数save_fans_data(data)
5. get_followers_data(id)
- 关注者数据爬取函数
功能说明:
获取指定用户关注的所有用户信息,逻辑与粉丝爬取类似。
API接口:
https://www.weibo.com/ajax/friendships/friends?page={}&uid={}
主要差异:
- URL不包含
relate=fans
参数 - 保存到
followers_data.csv
文件
数据字段说明
字段名 | 类型 | 说明 |
---|---|---|
uid | str | 目标用户的微博UID |
id | str | 粉丝/关注者的微博ID |
screen_name | str | 粉丝/关注者的昵称 |
description | str | 个性签名 |
followers_count | int | 粉丝数量 |
friends_count | int | 关注数量 |
statuses_count | int | 微博数量 |
gender | str | 性别(m/f/n) |
使用方法
1. 环境准备
确保已安装required依赖:
pip install requests
2. 获取Cookie
- 登录微博网页版
- 打开浏览器开发者工具(F12)
- 在Network标签页中找到任意请求
- 复制Cookie值替换代码中的"你的Cookie"
3. 运行脚本
if __name__ == '__main__': # 注意:原代码中此处有错误uid = ['2806747565'] # 目标用户UID列表for id in uid:get_fans_data(id) # 爬取粉丝数据get_followers_data(id) # 爬取关注数据
4. 批量爬取
支持同时爬取多个用户:
uid = ['2806747565', '1234567890', '9876543210']
输出文件
脚本运行后会在同目录下生成两个CSV文件:
- fans_data.csv: 包含所有粉丝的详细信息
- followers_data.csv: 包含所有关注者的详细信息
代码优化建议
1. 错误处理
def get_html(url):try:response = requests.get(url, headers=headers, cookies=cookies, timeout=10)response.raise_for_status() # 检查HTTP错误return response.textexcept requests.RequestException as e:print(f"请求失败: {e}")return None
2. 配置文件
将Cookie和其他配置项提取到单独的配置文件:
# config.py
COOKIE = "你的Cookie值"
USER_AGENT = "Mozilla/5.0 ..."
DELAY_TIME = 5
3. 进度显示
from tqdm import tqdmfor page in tqdm(range(1, math.ceil(total_number/20) + 1), desc="爬取进度"):# 爬取逻辑
4. 数据去重
def save_fans_data(data):# 检查是否已存在该用户数据if not is_duplicate(data['id']):# 保存数据
注意事项与风险提示
⚠️ 法律合规
- 请遵守相关法律法规和微博平台的使用条款
- 仅用于学习研究目的,不得用于商业用途
- 尊重用户隐私,不得滥用爬取的数据
🛡️ 技术风险
- 账号风险:频繁爬取可能导致账号被限制或封禁
- IP封禁:过于频繁的请求可能导致IP被封
- 数据时效性:用户数据会发生变化,爬取的数据具有时效性
🔧 使用限制
- 需要有效的登录Cookie
- 爬取速度受延时设置影响
- 大量数据爬取需要较长时间
扩展功能建议
- 数据库存储:将数据保存到MySQL或MongoDB
- 多线程爬取:提高爬取效率(需注意频率控制)
- 数据分析:添加粉丝画像分析功能
- 定时任务:支持定期自动爬取更新
- 图形界面:开发GUI界面提升用户体验
常见问题解决
Q1: Cookie失效怎么办?
A: 重新登录微博并获取新的Cookie值
Q2: 为什么有些用户爬取不到数据?
A: 可能是用户设置了隐私保护,或者账号已注销
Q3: 如何提高爬取速度?
A: 可以适当减少延时时间,但要注意不要触发反爬虫机制
Q4: 数据量太大怎么办?
A: 可以分批爬取,或者使用数据库而非CSV文件存储
版本信息
- 版本: 1.0.0
- 适用平台: Windows/macOS/Linux
- Python版本: 3.6+
- 最后更新: 2025年6月
免责声明: 本工具仅供学习和研究使用,使用者需承担相应的法律责任。作者不对因使用本工具而产生的任何后果负责。