)
前言国内工具做国内很强但出海品牌找海外 KOL 就抓瞎。飞瓜、卡思、新榜覆盖的是抖音快手生态一旦需要 Instagram、TikTok 海外版、YouTube 的博主数据这些工具要么没有要么字段少得可怜。而 HypeAuditor 虽然覆盖海外但每月订阅费用高、数据更新慢、细分条件有限——你想找粉丝在东南亚、互动率5%、近30天发过美妆内容这样的组合条件海外社媒数据分散在多个平台传统营销工具通常难以满足跨平台、实时和自定义筛选需求。工具月费覆盖平台数据时效核心局限飞瓜数据¥999–¥3,999/月抖音/快手/B站/小红书较新不覆盖 Instagram/TikTok 海外平台出海用不了新榜¥1,500–¥5,000/月微信/微博/抖音较新主要服务国内投放海外博主数据几乎没有卡思数据¥2,000/月抖音/快手/B站较新仅限国内平台蝉妈妈¥299–¥1,999/月抖音/TikTok 部分较新TikTok 海外数据覆盖不全字段有限HypeAuditor$99–$399/月Instagram/TikTok/YouTube月度更新价格高细分筛选能力弱无中文支持自建Bright Data按用量付费海外社媒全平台可自定义实时需要初始配置时间本文教你用 Bright Data 的 Web Scraper API从零搭建一套 KOL 数据采集 评分 Pipeline。Bright Data 是全球 Web 数据平台提供Web Scraper API — 提供 100 网站的数据采集方案输出结构化数据覆盖社交媒体、电商和企业数据等场景Residential Proxies — 提供 4 亿 residential IPs支持全球定位、IP rotation 和高级 anti-bot 场景按量付费 — 支持按使用量计费适合从 Demo 验证到生产级数据采集 Pipeline 的不同阶段从 KOL 发现、竞品分析到 AI 数据采集和市场研究稳定的 Web 数据来源是自动化系统的基础。Bright Data 提供 Web Scraper API、Residential Proxies 和数据产品帮助团队更高效地完成大规模 Web 数据采集。 探索 Bright Dat 数据采集解决方案一、注册并获取 API Token1.1 注册 Bright Data注册账号。新用户获得免费额度足够跑通本文全部示例。1.2 创建 API Token登录后在控制台Account → API Tokens → Create Token记下生成的 Token后续所有 API 调用都需要。# .envBRIGHTDATA_API_TOKEN你的_API_Token_放这里1.3 创建 Instagram 和 TikTok 数据采集器Zone在 Bright Data 控制台进入Data Collector → Scrapers → Scrapers Library搜索“Instagram”→ 选择 Instagram Profile Scraper → 点击Create Zone命名为instagram_profiles搜索“TikTok”→ 选择 TikTok Profile Scraper → 点击Create Zone命名为tiktok_profiles每个 Zone 都有一个 Zone Name后续调用 API 时指定这个名称即可触发采集。二、Bright Data API 的调用方式Bright Data Web Scraper API 是一个用于自动化采集结构化 Web 数据的 API。它允许开发者提交 URL、运行预构建 Scraper并获取 JSON 格式结果。开发者只需要通过 API 提交采集任务再根据返回的 snapshot_id 查询任务状态并下载结果数据。2.1 API 端点Bright Data Web Scraper API 的核心端点是Data Collector API (DCA)POST https://api.brightdata.com/dca/trigger注意API Endpoint 可能随 Bright Data 产品版本更新请以官方 API 文档为准。2.2 认证方式所有请求在 Header 中携带 Bearer TokenAuthorization:Bearer你的_API_TokenContent-Type:application/json2.3 工作流程Bright Data 的 Scraper API 是异步模式1. POST /dca/trigger ← 提交采集任务 ↓ 2. 轮询 GET /dca/snapshot/{id} ← 查询任务状态每 10 秒一次 ↓ 3. 任务完成后下载数据 ← 结构化 JSON每次调用返回一个snapshot_id用它持续查询任务状态phase字段直到phase done。2.4 触发采集的请求体{zone:instagram_profiles,input:[{url:https://www.instagram.com/beauty_by_emma/},{url:https://www.instagram.com/techwithjason/}]}zone你在控制台创建的 Zone 名称input要采集的目标 URL 列表三、采集 Instagram 博主数据# instagram_scraper.pyimportosimportjsonimporttimeimportrequestsfromdotenvimportload_dotenv load_dotenv()API_TOKENos.getenv(BRIGHTDATA_API_TOKEN)ZONEinstagram_profiles# 你在控制台创建的 Zone 名称API_BASEhttps://api.brightdata.com/dcaHEADERS{Authorization:fBearer{API_TOKEN},Content-Type:application/json,}deftrigger_collection(usernames:list[str])-str:提交采集任务返回 snapshot_idinputs[{url:fhttps://www.instagram.com/{u}/}foruinusernames]resprequests.post(f{API_BASE}/trigger,headersHEADERS,json{zone:ZONE,input:inputs},timeout30,)resp.raise_for_status()snapshot_idresp.json()[snapshot_id]print(f✓ 任务已提交snapshot_id {snapshot_id})returnsnapshot_iddefpoll_until_done(snapshot_id:str,interval:int10,max_attempts:int60):轮询任务状态直到完成foriinrange(max_attempts):time.sleep(interval)resprequests.get(f{API_BASE}/snapshot/{snapshot_id},headersHEADERS,timeout30,)resp.raise_for_status()snapresp.json()phasesnap.get(phase)print(f 轮询{i1}/{max_attempts}— phase{phase})ifphasedone:returnsnapifphasefailed:raiseRuntimeError(f任务失败:{snap})raiseTimeoutError(采集超时)defdownload_records(snapshot:dict)-list[dict]:从完成的 snapshot 中提取数据recordssnapshot.get(records,[])ifrecords:returnrecords snapshot_idsnapshot[snapshot_id]resprequests.get(f{API_BASE}/snapshot/{snapshot_id}/download,headersHEADERS,timeout60,)resp.raise_for_status()returnresp.json()ifresp.headers.get(Content-Type,).startswith(application/json)else[]# ── 主流程 ──if__name____main__:targets[beauty_by_emma,techwithjason,fitness_with_luna]sidtrigger_collection(targets)resultpoll_until_done(sid)datadownload_records(result)print(f\n✓ 采集完成共{len(data)}条博主数据)# Bright Data 返回的典型字段包括:# username, full_name, biography, followers_count, following_count,# posts_count, is_verified, is_business_account, category,# recent_posts (含 likes, comments, timestamp, caption)withopen(instagram_data.json,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)print(✓ 已保存到 instagram_data.json)关键点zone必须与你在控制台创建的 Zone Name 完全一致输入是 Instagram 的公开 profile URL不需要登录返回数据是结构化 JSON包含粉丝数、互动数据、近期帖文等轮询间隔建议 10 秒多数采集任务在 30-60 秒内完成四、采集 TikTok 创作者数据TikTok 的调用逻辑与 Instagram 完全一致只是 Zone 名称和目标 URL 不同。# tiktok_scraper.pyimportosimportjsonimporttimeimportrequestsfromdotenvimportload_dotenv load_dotenv()API_TOKENos.getenv(BRIGHTDATA_API_TOKEN)ZONEtiktok_profiles# 你在控制台创建的 TikTok ZoneAPI_BASEhttps://api.brightdata.com/dcaHEADERS{Authorization:fBearer{API_TOKEN},Content-Type:application/json,}deftrigger_tiktok_collection(usernames:list[str])-str:提交 TikTok 采集任务inputs[{url:fhttps://www.tiktok.com/{u}}foruinusernames]resprequests.post(f{API_BASE}/trigger,headersHEADERS,json{zone:ZONE,input:inputs},timeout30,)resp.raise_for_status()returnresp.json()[snapshot_id]defpoll_tiktok(snapshot_id:str,interval:int10,max_attempts:int60):轮询直到完成foriinrange(max_attempts):time.sleep(interval)resprequests.get(f{API_BASE}/snapshot/{snapshot_id},headersHEADERS,timeout30,)snapresp.json()ifsnap.get(phase)done:returnsnapifsnap.get(phase)failed:raiseRuntimeError(f任务失败:{snap})print(f 轮询{i1}/{max_attempts}— phase{snap.get(phase)})raiseTimeoutError(采集超时)defdownload_tiktok(snapshot:dict)-list[dict]:下载数据recordssnapshot.get(records,[])ifrecords:returnrecords sidsnapshot[snapshot_id]resprequests.get(f{API_BASE}/snapshot/{sid}/download,headersHEADERS,timeout60,)returnresp.json()ifisinstance(resp.json(),list)else[]if__name____main__:targets[beauty_by_emma,techwithjason,fitness_with_luna]sidtrigger_tiktok_collection(targets)resultpoll_tiktok(sid)datadownload_tiktok(result)print(f\n✓ 采集完成共{len(data)}条创作者数据)# TikTok 返回字段示例:# username, nickname, follower_count, heart_count, video_count,# avg_views, avg_likes, avg_shares, follower_growth_estimatewithopen(tiktok_data.json,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)print(✓ 已保存到 tiktok_data.json)TikTok 特殊说明除了按 username 采集Bright Data 还支持按hashtag发现创作者在input中传入{url: https://www.tiktok.com/tag/beauty}即可触发标签搜索模式TikTok JSON 返回通常嵌套在userInfo.stats下解析时注意字段路径从 Demo 到生产环境本文示例展示了如何调用 API 获取 Instagram 和 TikTok 数据。在真实项目中你还可以进一步扩展自动化每日数据更新多平台 KOL 数据合并AI 驱动的内容分析企业级 Web 数据 Pipeline 开始使用 Bright Data 构建你的数据基础设施五、构建 KOL 评分与筛选模型拿到 Instagram 和 TikTok 的原始数据后我们需要合并— 同一个 KOL 可能在 IG 和 TT 都有账号按 username 合并标准化— 不同维度的指标量纲不同粉丝数 vs 互动率需要归一化到 0-100加权打分— 根据你的 campaign 优先级设置各维度权重排名— 按综合得分降序排列5.1评分维度与默认权重维度权重指标来源归一化方式互动率30%Instagram / TikTok engagement rateMin-Max → 0–100涨粉速度20%TikTok 近期视频播放量趋势Min-Max → 0–100粉丝规模15%Instagram TikTok 总粉丝数对数归一化带货潜力10%是否有 TikTok Shop 商品数Min-Max → 0–100更新频率10%Instagram 每周发帖数Min-Max → 0–100平均播放15%TikTok 视频平均播放量对数归一化权重可在**.env**中自定义KOL_WEIGHT_ENGAGEMENT_RATE0.30 KOL_WEIGHT_FOLLOWER_GROWTH0.20 KOL_WEIGHT_FOLLOWERS0.15 KOL_WEIGHT_COMMERCE_POTENTIAL0.10 KOL_WEIGHT_CONTENT_FREQUENCY0.10 KOL_WEIGHT_AVG_VIEWS0.155.2核心评分代码# kol_scoring.py — 核心逻辑importnumpyasnpimportpandasaspddefminmax_norm(values:np.ndarray)-np.ndarray:Min-Max 归一化到 0–100lo,hivalues.min(),values.max()ifhi-lo1e-9:returnnp.full_like(values,50.0)return(values-lo)/(hi-lo)*100deflog_norm(values:np.ndarray)-np.ndarray:对数归一化适合粉丝数这类长尾指标loggednp.log1p(np.maximum(values,1))lo,hilogged.min(),logged.max()ifhi-lo1e-9:returnnp.full_like(values,50.0)return(logged-lo)/(hi-lo)*100defscore_kols(df:pd.DataFrame,weights:dict)-pd.DataFrame:df[_engagement]np.maximum(df[ig_engagement_rate].fillna(0),df[tt_engagement_rate].fillna(0),)df[score_engagement]minmax_norm(df[_engagement].values)df[score_growth]minmax_norm(df[tt_follower_growth].fillna(0).values)df[score_followers]log_norm(df[total_followers].fillna(0).values)df[score_commerce]minmax_norm(df[tt_products_count].fillna(0).values)df[score_content_freq]minmax_norm(df[ig_posts_per_week].fillna(0).values)df[score_views]log_norm(df[tt_avg_views].fillna(0).values)df[kol_score](df[score_engagement]*weights[engagement_rate]df[score_growth]*weights[follower_growth]df[score_followers]*weights[followers]df[score_commerce]*weights[commerce]df[score_content_freq]*weights[content_frequency]df[score_views]*weights[avg_views])df.sort_values(kol_score,ascendingFalse,inplaceTrue)df[rank]range(1,len(df)1)returndf总结及代码仓库你可以在GitHub中获取完整代码将API_TOKEN替换为你的真实 Tokenhttps://github.com/xyp0213/brightdata–brightdata--/├── scripts/│ ├── instagram_scraper.py ← Instagram 采集器 │ ├── tiktok_scraper.py ← TikTok 采集器 │ ├── kol_scoring.py ← KOL 评分引擎 │ └── export_report.py ← 导出 Excel/Google Sheets ├──.env.example ← 环境变量模板 ├── requirements.txt └── README.md本文给出了一个自建 KOL 数据 Pipeline 的完整方案Bright Data Web Scraper API 可以降低海外平台数据采集的工程复杂度减少代理管理和反爬基础设施维护成本同时避免从零编写 XPath/CSS selector。对于需要跨平台、自定义字段和自动化更新的出海团队来说自建 Web 数据采集 Pipeline 能提供更高的灵活性。通过 Bright Data Web Scraper API你可以按业务需求采集 Instagram、TikTok 等平台的数据并将结果接入后续的 KOL 评分、内容分析和市场研究流程。下一步把社媒数据转化为业务洞察找到合适的 KOL 只是第一步。通过自动化 Web 数据采集你可以持续追踪创作者增长趋势内容表现变化市场热点竞品营销动作立即开始使用 Bright Data搭建你的海外社媒数据分析系统。