
摘要
海外品牌做 KOL 营销时,最大的问题不是找到达人,而是判断哪些账号值得投入预算。人工筛选 Instagram 和 TikTok 数据耗时且难规模化。
我基于 Bright Data 的数据抓取能力 + Cloud Code 工具,搭建了一套海外社媒网红营销情报系统。核心思路很直接:批量抓取双平台公开数据 → 五维量化评分模型(满分 100 分)自动甄别刷量账号 → React 前端可视化呈现。整套系统单文件启动,包含数据大屏、任务管理、竞品监测、告警中心等模块,实测 KOL 数据分析全流程自动化。
核心能力:
- 双平台数据抓取:Bright Data Web Scraper API 和 Datasets 获取结构化 Instagram/TikTok 公开数据。
- 智能评分体系:五维评分模型自动甄别刷量账号,输出 S/A/B/C/D 五级评级
- 可视化管控:React 前端 + FastAPI 后端,单文件一键启动
- 竞品追踪分析:监测竞品投放动态,拆解内容策略
- 自动化告警:任务状态实时监控,异常情况即时通知
一、环境准备
1.1 Cloud Code + CC Switch 安装配置
参考 UP 主人工大黑教程,包含详细文字说明与实操视频,可逐步完成安装配置:
🔗 Claude Code 安装教程:https://daheiai.com/cc-install.html
1.2 CC Switch 配置 Xiaomi MIMO API Key
步骤 1:获取 Xiaomi MIMO API Key

步骤 2:CC Switch 点击 Cloud Code 图标,添加新供应商并选择 Xiaomi MiMo

步骤 3:填写获取的 API Key

步骤 4:测试配置,如下显示表示成功

1.3 Bright Data API Key 获取
步骤 1:访问 Bright Data 官网 并登录账号

步骤 2:控制台首页内置智能助手,可解答平台接入、数据抓取、AI 集成相关问题

步骤 3:检查账单页面确认账号额度充足

步骤 4:创建 Refresh API Key(User 普通权限即可调用数据抓取、MCP 接口)

步骤 5:复制新 API 密钥并妥善保管

二、项目搭建
2.1 Bright Data 社媒 API 接口准备
步骤 1:Bright Data 控制台进入「数据抓取器 - 抓取库」,获取官方 Instagram + TikTok 接口调用 Python 代码

步骤 2:Instagram API 配置,选择 Python Request 代码示例并复制
可用端点:Instagram - 个人资料-按网址收集(用于收集社媒网红资料信息用于分析)
输入配置:手动填采集链接,或 CSV 批量导入 URL,支持增删清空地址
抓取模式:同步即时返回结果,适合少量快速抓取;异步后台存数据,适合大批量采集
传送设置:配置 Webhook、云存储,采集数据自动推送
记录限制:设置单链接最大采集条数,控制数据量与成本
附加设置:调整访问频率、IP 地区、访问策略等抓取底层参数
import requests
import json
headers = {
"Authorization": "Bearer YOUR_BRIGHT_DATA_API_KEY",
"Content-Type": "application/json",
}
data = json.dumps({
"input": [{"url":"https://www.instagram.com/cats_of_world_/"},{"url":"https://www.instagram.com/dogsofinstagram/"},{"url":"https://www.instagram.com/zoobarcelona"},{"url":"https://www.instagram.com/australiazoo"}],
})
response = requests.post(
"https://api.brightdata.com/datasets/v3/scrape?dataset_id=gd_l1vikfch901nx3by4¬ify=false&include_errors=true",
headers=headers,
data=data
)
print(response.json())

步骤 3:TikTok API 配置,同样选择 Python Request 代码示例并复制
import requests
import json
headers = {
"Authorization": "Bearer YOUR_BRIGHT_DATA_API_KEY",
"Content-Type": "application/json",
}
data = json.dumps({
"input": [{"url":"https://www.tiktok.com/@fofimdmell","country":""},{"url":"https://www.tiktok.com/@s_o_h_e_l_46","country":""}],
})
response = requests.post(
"https://api.brightdata.com/datasets/v3/scrape?dataset_id=gd_l1villgoiiidt09ci¬ify=false&include_errors=true",
headers=headers,
data=data
)
print(response.json())

如果你的项目需要批量采集社交媒体公开数据,可以使用 Bright Data Web Scraper API 获取结构化数据,减少维护爬虫和反爬逻辑的成本👉探索 Bright Data Web Scraper API
2.2 Cloud Code 项目框架搭建
项目定位:KOL 情报监测系统,FastAPI 后端对接 BrightData 采集数据、KOL 评分与定时任务,React 前端提供可视化管理页面,单文件统一启动
├── run.py # 统一启动入口
├── requirements.txt # Python 依赖
├── data/ # 数据库目录(运行后自动生成,不入库)
│
├── backend/ # 后端服务
│ ├── main.py # FastAPI 路由 + 静态文件托管
│ ├── database.py # 数据库连接管理
│ ├── models.py # 数据模型(Task/Influencer/Competitor/Alert 等)
│ ├── brightdata.py # Bright Data API 封装(NDJSON 解析 + 自动重试)
│ ├── kol_scorer.py # KOL 五维评分算法
│ └── scheduler.py # APScheduler 定时任务调度
│
└── frontend/ # 前端页面
├── src/
│ ├── api.js # axios 请求封装
│ ├── App.jsx # 路由配置
│ ├── index.css # 全局样式 + TailwindCSS 组件类
│ └── components/
│ ├── Layout.jsx # 侧边栏布局
│ ├── Dashboard.jsx # 数据大屏
│ ├── TaskManager.jsx # 采集任务管理
│ ├── KOLList.jsx # KOL 管理 + 评分详情
│ ├── Competitor.jsx # 竞品监测
│ ├── AlertPanel.jsx # 告警中心
│ ├── Settings.jsx # 系统设置
│ └── ModalConfirm.jsx # 通用弹窗组件
└── dist/ # 前端构建产物(npm run build 自动生成)
步骤 1:VsCode 打开项目,安装 Cloud Code For VsCode 插件

步骤 2:给定 Cloud Code 项目需求 Prompt
搭建Bright Data 批量采集 Instagram + TikTok 数据:海外社媒网红营销情报的项目
1、前端可视化系统:精美 UI 页面,数据大屏展示,采集任务管控、多维度筛选、数据导出、异常告警一站式交互
2、KOL 量化评分模型:多维度核算网红商业分值,甄别刷量造假账号,输出投放优劣判断与合作建议
3、Bright Data 抓取引擎:适配代理池规避平台风控,批量抓取 TikTok/Ins 公开数据,自动去重清洗、定时增量更新
4、竞品监测与投放分析:追踪竞品网红投放动态,拆解爆款内容逻辑,预测投放收益,自动生成分析报表
5、Bright Data的API Key需要设置功能让用户在页面配置API Key
如下提供Bright Data 官方Instagram + TikTok接口调用 Python 代码
Instagram代码:
import requests
import json
headers = {
"Authorization": "Bearer YOUR_BRIGHT_DATA_API_KEY",
"Content-Type": "application/json",
}
data = json.dumps({
"input": [{"url":"https://www.instagram.com/cats_of_world_/"},{"url":"https://www.instagram.com/dogsofinstagram/"},{"url":"https://www.instagram.com/zoobarcelona"},{"url":"https://www.instagram.com/australiazoo"}],
})
response = requests.post(
"https://api.brightdata.com/datasets/v3/scrape?dataset_id=gd_l1vikfch901nx3by4¬ify=false&include_errors=true",
headers=headers,
data=data
)
print(response.json())
TikTok代码:
import requests
import json
headers = {
"Authorization": "Bearer YOUR_BRIGHT_DATA_API_KEY",
"Content-Type": "application/json",
}
data = json.dumps({
"input": [{"url":"https://www.tiktok.com/@fofimdmell","country":""},{"url":"https://www.tiktok.com/@s_o_h_e_l_46","country":""}],
})
response = requests.post(
"https://api.brightdata.com/datasets/v3/scrape?dataset_id=gd_l1villgoiiidt09ci¬ify=false&include_errors=true",
headers=headers,
data=data
)
print(response.json())




三、核心功能模块
3.1 数据大屏

后端一次聚合查询返回全部指标,前端用 Recharts 饼图 + 雷达图渲染。
后端 /api/dashboard:func.avg / func.sum 直接在 SQL 层聚合,避免 Python 遍历。
@app.get("/api/dashboard")
def dashboard_stats(db: Session = Depends(get_db)):
avg_score = db.query(func.avg(Influencer.kol_score)).scalar() or 0
total_followers = db.query(func.sum(Influencer.followers)).scalar() or 0
level_dist = {lvl: db.query(Influencer).filter(Influencer.kol_level == lvl).count()
for lvl in ["S", "A", "B", "C", "D"]}
top_kols = db.query(Influencer).order_by(Influencer.kol_score.desc()).limit(10).all()
return {"avg_score": round(float(avg_score), 1), "level_distribution": level_dist, "top_kols": top_kols, ...}
前端饼图悬停浮起:自定义 ActiveShape,悬停时扇区外弹 8px + 中心显示名称数量。
function ActiveShape(props) {
const { cx, cy, innerRadius, outerRadius, startAngle, endAngle, fill, payload, value } = props;
return (
<g>
<text x={cx} y={cy - 8} textAnchor="middle" fill="#334155" fontSize={14} fontWeight={600}>{payload.name}</text>
<text x={cx} y={cy + 14} textAnchor="middle" fill="#64748b" fontSize={12}>{value} 位</text>
<sector cx={cx} cy={cy} innerRadius={innerRadius} outerRadius={outerRadius + 8}
startAngle={startAngle} endAngle={endAngle} fill={fill} />
</g>
);
}
<Pie activeIndex={activeLevel} activeShape={ActiveShape}
onMouseEnter={(_, i) => setActiveLevel(i)} ... />
3.2 采集任务

Bright Data API 封装:NDJSON 逐行解析 + 网络异常自动重试 3 次(指数退避 3s/6s/9s)。
def scrape_profiles(self, urls: list[str], platform: str, max_retries: int = 3) -> dict:
dataset_id = INSTAGRAM_DATASET_ID if platform == "instagram" else TIKTOK_DATASET_ID
input_data = [{"url": url} for url in urls] if platform == "instagram" else [{"url": url, "country": ""} for url in urls]
for attempt in range(max_retries):
try:
response = requests.post(f"{BASE_URL}/scrape?dataset_id={dataset_id}¬ify=false&include_errors=true",
headers=self.headers, data=json.dumps({"input": input_data}), timeout=120)
if response.status_code == 202: # 异步
return {"status": "pending", "snapshot_id": response.json()["snapshot_id"], "data": []}
data_list = [json.loads(line) for line in response.text.strip().splitlines() if line.strip()]
return {"status": "completed", "data": data_list}
except (requests.exceptions.ProxyError, requests.exceptions.ConnectionError):
if attempt < max_retries - 1: time.sleep(3 * (attempt + 1))
return {"status": "error", "error": "Max retries exceeded", "data": []}
任务执行引擎:后台线程按批次处理,实时更新进度,入库前 URL 标准化去重。
def run_task(task_id: int):
db = SessionLocal()
task = db.query(Task).filter(Task.id == task_id).first()
task.status = "running"; db.commit()
client = BrightDataClient(get_api_key(db))
for i in range(0, len(task.urls), 50):
result = client.scrape_and_wait(task.urls[i:i+50], task.platform, max_wait=120)
for item in result.get("data", []):
_upsert_influencer(db, normalize_data(item, task.platform), task.id)
task.progress = int((min(i + 50, len(task.urls)) / len(task.urls)) * 100)
db.commit()
task.status = "completed"; db.commit()
def _normalize_url(url: str) -> str:
return url.rstrip("/").lower()
3.3 KOL 管理

五维评分模型:每维度 0-20 分,总分 100,S≥85 / A≥70 / B≥55 / C≥40 / D<40。
TikTok、Instagram 双平台数据采集与 KOL 智能评分体系,满分 100 分。评分基于 Bright Data API 采集的公开数据,五维度各 20 分:
- 粉丝质量(20分):粉丝量级对数阶梯评估(1K=2, 10K=5, 100K=11, 1M=16, 10M=19),认证账号额外加 2 分,量级越大边际分值越低,避免超大号碾压
- 互动质量(20分):互动率基准评分(≥8%=12分, ≥3%=8分, ≥0.8%=4分)+ 绝对互动量评分(点赞+评论总量),双指标交叉验证识别刷量嫌疑
- 内容质量(20分):发帖量阶梯(100+=6, 50+=5, 20+=4)+ 评论/点赞比评估内容互动深度,发帖少且互动低的账号扣分
- 增长趋势(20分):通过粉丝互动比推算账号增长活力,点赞/粉丝比越高说明内容吸引力越强,结合发帖成熟度加权
- 商业价值(20分):粉丝量级分层(100万+=8, 10万+=6, 1万+=4)+ 认证加 3 分 + 高价值品类加 3 分(时尚/美妆/科技/健身/旅行等)+ 互动质量加权
系统自动输出 S/A/B/C/D 五级星级评级,每个等级配有差异化投放建议:S 级建议品牌大使长期合作,A 级建议深度内容合作,B 级建议小预算试投,C 级建议仅置换合作,D 级不推荐投放
def calculate_kol_score(data: dict, all_influencers: list[dict] = None) -> dict:
scores = {
"score_followers": _score_followers(data), # 对数阶梯: 1K=2, 10K=5, 100K=11, 1M=16, 10M=19
"score_engagement": _score_engagement(data), # 互动率基准: ≥8%=12, ≥3%=8, ≥0.8%=4
"score_content": _score_content(data), # 发帖量 + 评论/点赞比
"score_growth": _score_growth(data), # 粉丝互动比推算增长
"score_business": _score_business(data), # 量级+认证+品类加权
}
total = round(min(100, max(0, sum(scores.values()))), 1)
return {"kol_score": total, "kol_level": _get_level(total), "kol_suggestion": _get_suggestion(total, scores), **scores}
def _score_followers(data: dict, all_data=None) -> float:
followers = data.get("followers", 0)
if followers <= 0: base = 0
elif followers < 1000: base = 2
elif followers < 10000: base = 5
elif followers < 100000: base = 11
elif followers < 1000000:base = 16
else: base = 19
if data.get("is_verified"): base = min(20, base + 2)
return round(min(20, base), 1)
前端雷达图:详情弹窗展示五维评分,满分 20 的雷达图。
<RadarChart data={[
{ dim: "粉丝质量", val: selected.score_followers },
{ dim: "互动质量", val: selected.score_engagement },
{ dim: "内容质量", val: selected.score_content },
{ dim: "增长趋势", val: selected.score_growth },
{ dim: "商业价值", val: selected.score_business },
]}>
<PolarGrid /><PolarAngleAxis dataKey="dim" /><PolarRadiusAxis domain={[0, 20]} />
<Radar dataKey="val" stroke="#3b82f6" fill="#3b82f6" fillOpacity={0.15} />
</RadarChart>
3.4 竞品监测

数据模型:Competitor 存竞品信息,CompetitorCampaign 存投放记录。
class Competitor(Base):
__tablename__ = "competitors"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(200), nullable=False)
platform = Column(String(20), nullable=False)
profile_url = Column(String(500), nullable=True)
tracked_influencers = Column(JSON, nullable=True) # list of influencer URLs
notes = Column(Text, nullable=True)
created_at = Column(DateTime, server_default=func.now())
class CompetitorCampaign(Base):
__tablename__ = "competitor_campaigns"
id = Column(Integer, primary_key=True, index=True)
competitor_id = Column(Integer, nullable=False)
influencer_url = Column(String(500), nullable=False)
estimated_reach = Column(Integer, default=0)
estimated_engagement = Column(Float, default=0)
前端追踪标签:截取 URL 尾部用户名作为标签,超出 5 个显示折叠计数。
{comp.tracked_influencers.slice(0, 5).map((url, i) => (
<span key={i} className="badge bg-slate-50 text-slate-600 border-slate-200 font-mono text-[10px]">
{url.split("/").filter(Boolean).pop()}
</span>
))}
{comp.tracked_influencers.length > 5 && <span className="badge">+{comp.tracked_influencers.length - 5}</span>}
3.5 告警中心

数据模型:四级告警(info / warning / error / success),支持按级别和已读状态筛选。
class Alert(Base):
__tablename__ = "alerts"
id = Column(Integer, primary_key=True, index=True)
level = Column(String(20), nullable=False) # info / warning / error / success
title = Column(String(300), nullable=False)
message = Column(Text, nullable=True)
source = Column(String(100), nullable=True) # task / system / competitor
is_read = Column(Boolean, default=False)
created_at = Column(DateTime, server_default=func.now())
自动生成时机:任务创建、任务完成、任务失败时自动写入告警记录。
def run_task(task_id: int):
...
if result["status"] == "error":
create_alert(db, "error", f"任务 {task.name} 采集失败", result.get("error", ""), "task")
return
...
create_alert(db, "success", f"任务 {task.name} 完成", f"成功采集 {len(all_results)} 条数据", "task")
def create_task(body: TaskCreate, db: Session = Depends(get_db)):
...
create_alert(db, "info", f"任务已创建: {task.name}", f"共 {len(body.urls)} 个链接", "task")
前端样式映射:不同级别对应不同颜色图标,未读告警左侧显示 brand 色条。
const LEVEL_CONFIG = {
info: { icon: Info, color: "text-blue-600", bg: "bg-blue-50", border: "border-blue-200" },
success: { icon: CheckCircle2, color: "text-emerald-600", bg: "bg-emerald-50", border: "border-emerald-200" },
warning: { icon: AlertTriangle, color: "text-amber-600", bg: "bg-amber-50", border: "border-amber-200" },
error: { icon: XCircle, color: "text-red-600", bg: "bg-red-50", border: "border-red-200" },
};
<div className={`card-hover flex items-start gap-4 ${
!alert.is_read ? "border-l-4 border-l-brand-500" : "opacity-60"
}`}>
3.6 系统设置

API Key 轻量验证:GET /snapshots 仅校验认证,不触发抓取。200=有效,401=无效。
def validate_key(self) -> bool:
resp = requests.get(f"{BASE_URL}/snapshots", headers=self.headers, timeout=10)
return resp.status_code == 200
密码显隐:CSS 隐藏浏览器原生按钮,自定义 Eye/EyeOff 图标切换 type=“password” ↔ type=“text”。
<input
type={showKey ? "text" : "password"}
className="input-field font-mono pr-10"
placeholder="输入您的 Bright Data API Key..."
value={apiKey}
onChange={(e) => { setApiKey(e.target.value); setKeyStatus(null); }}
/>
<button onClick={() => setShowKey(!showKey)}
className="absolute right-2 top-1/2 -translate-y-1/2 p-1.5 rounded-md hover:bg-slate-100 text-slate-400 hover:text-slate-600">
{showKey ? <EyeOff className="w-4 h-4" /> : <Eye className="w-4 h-4" />}
</button>
input::-ms-reveal,
input::-ms-clear {
display: none !important;
}
input[type="password"]::-webkit-credentials-auto-fill-button,
input[type="password"]::-webkit-strong-password-auto-fill-button {
display: none !important;
visibility: hidden !important;
pointer-events: none !important;
position: absolute !important;
}
清空数据:删除全部业务表数据,保留 settings 表中的 API Key。
@app.delete("/api/clear-all")
def clear_all_data(db: Session = Depends(get_db)):
for t in db.query(Task).all(): remove_task(t.id)
for model in [CompetitorCampaign, Competitor, Post, Influencer, Task, Alert]:
db.query(model).delete()
db.commit() # settings 表不动
return {"ok": True}
四、数据抓取实战
步骤 1:系统设置中配置 Bright Data API Key

步骤 2:采集任务中新建 Instagram 和 TikTok 任务(默认 Instagram 30 条、TikTok 20 条网红主页链接)


步骤 3:创建并开始采集,Bright Data 控制台可实时查看抓取状态


步骤 4:等待数分钟完成抓取,如有报错会在告警中心显示详细信息


步骤 5:KOL 管理页面查看五维量化评分结果(满分 100 分,S/A/B/C/D 五级),支持数据导出

- CSV 导出数据:双平台已认证网红完整数据,按粉丝规模、互动量、综合评分划分为顶级推荐、优质合作、中等价值三梯队,直观筛选不同预算对应的海外营销达人

步骤 6:数据大屏总览汇总 46 位 KOL(Instagram 26 位、TikTok 20 位),整体均分 67.4、平均互动率 1.26%,直观掌握达人池规模、质量结构、平台配比及采集进度


步骤 7:竞品监测追踪竞争对手网红投放策略,分析竞品 KOL 合作偏好、投放节奏和内容打法,优化自身网红筛选和预算分配


步骤 8:告警中心完整记录采集任务全流程动态,实时追踪进度、核对执行结果

五、总结
本实战指南完整演示了从环境配置到系统搭建、数据采集的全流程,核心成果如下:
系统优势:
- 高效采集:Bright Data 提供企业级 Web 数据采集基础设施,包括数据采集 API、代理网络和自动化浏览能力,帮助开发者稳定获取公开网页数据,支持批量抓取 Instagram/TikTok 公开数据,自动去重清洗。
- 智能评分:五维量化模型(粉丝质量/互动质量/内容质量/增长趋势/商业价值)满分 100 分,自动输出 S/A/B/C/D 五级评级与投放建议
- 可视化管控:React 前端 + FastAPI 后端,数据大屏、任务管理、竞品监测、告警中心一站式交互
- 成本可控:轻量验证 API Key,异步批量采集,支持定时增量更新
实战成果:
- 成功采集 46 位 KOL 数据(Instagram 26 位、TikTok 20 位),整体均分 67.4 分
- 自动识别 A/B 级博主为主体,精准划分投放梯队
- 完整记录任务全流程动态,支持数据导出与竞品策略分析
适用场景:
- 品牌方海外网红营销投放选型
- MCN 机构达人库建设与质量评估
- 竞品投放策略追踪与分析
- 跨境电商业态达人合作筛选
六、获取完整项目代码

本系统完整源码已开源,可直接下载使用:
🔗 GitHub仓库:https://github.com/weishuoHH/brightdata-influencer-intelligence
快速开始:
# 1. 克隆项目
git clone https://github.com/weishuoHH/brightdata-influencer-intelligence.git
# 2. 安装依赖
pip install -r requirements.txt
# 3. 启动系统
python run.py
想构建类似的 KOL 数据分析系统?立即 创建 Bright Data 账号,体验 Web Scraper API、Datasets 和代理基础设施,为你的 AI 和数据项目快速获取可靠 Web data。
4万+

被折叠的 条评论
为什么被折叠?



