Bright Data Web Scraping 实战指南:如何构建 Instagram 和 TikTok KOL 数据分析系统(2026)

摘要

海外品牌做 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&notify=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&notify=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&notify=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&notify=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}&notify=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。

评论 245
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wei_shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值