爬虫实战教程:如何使用Python抓取TikTok的评论数据?

发布时间:2026/6/24 8:52:19
爬虫实战教程:如何使用Python抓取TikTok的评论数据? TikTok 是目前全球用户规模最大的短视频社交平台之一日活跃用户超过 10 亿内容覆盖娱乐、教育、电商等各大垂类。在这个庞大的内容生态里评论区往往比视频本身更具研究价值——用户的真实反馈、情感倾向、消费意图全都沉淀在一条条评论文字中。然而TikTok 平台并未开放公共评论 API且页面采用 JavaScript 动态加载机制给数据获取带来了一定难度。本文将手把手带你用 Python 完成 TikTok 评论数据抓取的全流程。一、TikTok 评论数据的核心应用场景在正式动手之前我们先明确一个问题抓取 TikTok 评论数据究竟能用来做什么竞品内容分析通过批量抓取竞品账号热门视频下的 TikTok 评论可以快速识别用户最关注的产品痛点和功能需求为差异化内容策略提供依据。爆款内容研究高赞评论往往预示着用户的共鸣点。分析爆款视频的评论关键词分布有助于创作团队找到下一个流量爆发点。舆情监控与品牌管理对品牌相关视频下的 TikTok 评论持续进行情感分析可以实时感知舆论风向为公关决策提供数据支撑。用户画像构建评论者的发言内容、互动频率、IP属地等信息是构建精准用户画像的重要原始素材。基于以上场景本文的目标是使用Python搭建一个轻量级的TikTok数据监控工具并通过代理IP解决采集过程中常见的访问限制问题让你的TikTok数据爬取任务更稳定、更高效。二、Python 抓取 TikTok 评论数据完整实战教程了解了应用场景我们正式进入技术实现环节。整个流程分为 8 个步骤每步附完整可运行代码。第 1 步工具准备与依赖安装在开始抓取 TikTok 评论之前需要安装以下 Python 依赖库pip install requests pandas jieba wordcloud matplotlib各库用途说明requests发送 HTTP 请求pandas数据清洗与 CSV 存储jieba中文分词用于评论关键词分析wordcloudmatplotlib词云可视化同时建议按如下结构组织项目目录便于后续管理TikTokCommentScraper/ ├── data/ # 存放抓取结果 ├── scripts/ # 爬虫脚本 ├── logs/ # 运行日志 ├── requirements.txt └── README.md第 2 步分析 TikTok 评论加载机制在编写代码之前必须先通过浏览器开发者工具F12摸清 TikTok 评论的数据接口。打开目标视频页面在 Network 面板中筛选 XHR 请求找到类似/api/comment/list/的接口请求。该接口返回结构化 JSON 数据包含评论内容、点赞数、用户信息、IP 属地等字段。TikTok 评论页面通过 JavaScript 动态渲染传统静态请求无法直接获取。核心参数中cursor字段用于控制翻页偏移量通常步长为 20aweme_id为目标视频 ID这两个参数是实现翻页抓取的关键。第 3 步构造请求获取评论接口数据从 Network 面板复制请求头中的Cookie和请求参数后即可构造如下请求import requests # 建议使用 Session session requests.Session() HEADERS { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Referer: https://www.tiktok.com/, Accept: application/json, text/plain, */*, Accept-Language: zh-CN,zh;q0.9,en;q0.8, Cookie: 你的完整Cookie } def get_comments(aweme_id, cursor0, count20): url https://www.tiktok.com/api/comment/list/ # 注意这里的 params 必须包含你从浏览器中抓到的所有加密参数如 X-Bogus # 并且这些参数通常与当前的 cursor、timestamp 绑定直接写死可能会导致翻页cursor变动时失效 params { aweme_id: aweme_id, cursor: cursor, count: count, # X-Bogus: xxxxxx, # 必须从抓包中获取 # _signature: xxxxxx, } try: response session.get(url, headersHEADERS, paramsparams, timeout10) response.raise_for_status() # 如果返回 4xx 或 5xx 错误会抛出异常 return response.json() except Exception as e: print(f请求失败: {e}) return None注意Cookie 具有时效性失效后需重新从浏览器获取。建议将 Cookie 存入独立配置文件便于统一管理和更新。第 4 步配置代理提升 TikTok 数据抓取稳定性数据抓取过程中频繁请求同一接口极易触发 TikTok 的风控机制导致IP被封禁从而影响数据抓取进程。为保障 TikTok 数据抓取的稳定性很多专业数据采集团队选择通过专业代理商如IPFoxy配置可轮换的动态代理池作为解决方案。下面以IPFoxy动态住宅代理为例演示如何在 Python 中配置并使用代理。获取代理信息通过IPFoxy获取【动态住宅代理】分别配置州城市、协议类型、会话轮换类型、代理格式等信息获取到可用于链接的代理连接信息。在Python中配置代理将刚刚在IPFoxy复制的代理连接信息粘贴到配置以下配置示例代码中如代理连接信息是username:passwordgate-us-ipfoxy.io:58688那么配置代码示例如下import urllib.request if __name__ __main__: proxy urllib.request.ProxyHandler({ https: username:passwordgate-us-ipfoxy.io:58688, http: username:passwordgate-us-ipfoxy.io:58688, }) opener urllib.request.build_opener(proxy,urllib.request.HTTPHandler) urllib.request.install_opener(opener) content urllib.request.urlopen(http://www.ip-api.com/json).read() print(content)这时直醒行代码就可以从日志看到出口IP改变此时信息配置成功可以进行下一步操作。除了代理轮换还建议在每次请求之间加入随机延迟如time.sleep(random.uniform(1.5, 3.5))模拟真实用户的浏览节奏显著降低被封禁的概率。第 5 步解析 TikTok 评论 JSON 数据接口返回的 JSON 中评论核心字段集中在comments数组内。以下代码完成字段提取from datetime import datetime def parse_comments(json_data): # 如果整个 json_data 为空或不是字典直接返回空列表 if not json_data or not isinstance(json_data, dict): return [] comment_list json_data.get(comments) or [] # 防止返回的 comments 字段本身为 None results [] for item in comment_list: # 安全地转换时间戳为可读格式格式YYYY-MM-DD HH:MM:SS raw_time item.get(create_time) formatted_time if raw_time: try: formatted_time datetime.fromtimestamp(int(raw_time)).strftime(%Y-%m-%d %H:%M:%S) except Exception: formatted_time str(raw_time) # 转换失败则保留原始数据 results.append({ comment_id: item.get(cid), text: item.get(text), like_count: item.get(digg_count, 0), # 缺省为 0方便后续数学计算 reply_count: item.get(reply_comment_total, 0), # 缺省为 0 create_time: formatted_time, # 已转换为可读时间 ip_location: item.get(ip_label, 未知), # 缺省为未知 user_name: item.get(user, {}).get(nickname, 已注销用户), # 链式安全获取防止报错 }) return results可提取的字段包括评论 ID、评论内容、点赞数、发布时间、IP 属地、用户昵称、回复数等十余个维度足以支撑大多数业务分析需求。第 6 步将评论数据保存至 CSV使用pandas将解析结果持久化存储并支持增量写入避免重复覆盖已有数据import pandas as pd import os def save_to_csv(data, filepathdata/comments.csv): # 防护 1如果没有数据直接返回 if not data: print(没有收到任何评论数据跳过保存。) return # 防护 2自动创建缺失的文件夹如 data/ dir_name os.path.dirname(filepath) if dir_name and not os.path.exists(dir_name): os.makedirs(dir_name) print(f已自动创建目录: {dir_name}) df pd.DataFrame(data) # 增量写入逻辑 if os.path.exists(filepath): df.to_csv(filepath, modea, headerFalse, indexFalse, encodingutf_8_sig) else: df.to_csv(filepath, modew, headerTrue, indexFalse, encodingutf_8_sig) print(f成功保存 {len(data)} 条评论至 {filepath})使用utf_8_sig编码可避免 Excel 打开 CSV 时出现中文乱码问题。第 7 步自动翻页抓取更多 TikTok 评论单次请求默认返回 20 条评论通过循环递增cursor值即可实现批量抓取import time import random def scrape_all_comments(aweme_id, max_pages50): all_comments [] cursor 0 # 动态定义文件名将不同视频的评论区分开 filepath fdata/comments_{aweme_id}.csv print(f开始抓取视频 {aweme_id} 的评论预计保存至 {filepath}...) for page in range(max_pages): # 1. 构造请求 data get_comments(aweme_id, cursorcursor) # 鲁棒性检查如果接口请求彻底失败比如网络超时返回 None 或非字典 if not data or not isinstance(data, dict): print(f第 {page1} 页请求异常未获取到有效 JSON 数据停止抓取。) break # 2. 解析数据 comments parse_comments(data) # 3. 判断是否抓取完毕 if not comments: print(本页未解析出任何评论可能已抓取完毕或触发风控。) break # 4. 数据合并与即时保存 all_comments.extend(comments) save_to_csv(comments, filepathfilepath) # 传入动态路径 print(f第 {page1} 页本页抓取 {len(comments)} 条累计已抓取 {len(all_comments)} 条评论) # 5. 判断是否还有下一页 (TikTok 的 has_more 通常是 1 或 True) has_more data.get(has_more) if not has_more or has_more in [0, 0, False]: print(接口返回 has_more 为空或为 False评论已全部加载完毕。) break # 6. 安全更新 cursor next_cursor data.get(cursor) if next_cursor is not None: cursor next_cursor else: # 如果接口没返回 cursor保守地通过 count 自增防止死循环 cursor 20 # 7. 随机延迟频率控制 sleep_time random.uniform(2.0, 4.5) # 稍微拉长一点延迟TikTok 风控极严格 time.sleep(sleep_time) print(f抓取任务结束共成功抓取 {len(all_comments)} 条评论。) return all_comments通过has_more字段判断是否还有更多评论避免无效请求造成资源浪费。第 8 步TikTok 评论关键词分析与词云可视化抓取完成后可对评论文本做进一步挖掘。以下示例使用 jieba 分词生成词云图import pandas as pd import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt from collections import Counter def analyze_keywords(csv_pathdata/comments.csv, top_n20): # 1. 安全读取数据 try: df pd.read_csv(csv_path, encodingutf_8_sig) except FileNotFoundError: print(f未找到数据文件: {csv_path}请先确认数据已抓取并保存。) return # 提取评论文本并去空 comments_text .join(df[text].dropna().astype(str).tolist()) # 2. 自定义停用词列表根据业务需要随时自行添加 stopwords {的, 了, 在, 是, 我, 你, 他, 她, 它, 们, 这, 那, 有, 都, 去, 和, 就, 也, 很, 到, 哈哈, 哈哈哈, 谢谢, 视频, 真的, 感觉, 一个} # 3. 使用 jieba 分词并清洗数据 # 过滤掉单字len 1以及停用词 cleaned_words [w for w in jieba.cut(comments_text) if len(w) 1 and w not in stopwords] # 4. 统计高频词 freq Counter(cleaned_words).most_common(top_n) print(f 过滤后的高频关键词 Top {top_n}) for word, count in freq: print(f {word}: {count} 次) # 5. 关键修正将清洗好的词用空格拼接成字符串再传给 WordCloud wordcloud_input_text .join(cleaned_words) if not wordcloud_input_text.strip(): print(警告没有足够的有效词汇用于生成词云) return # 6. 生成并渲染词云 # 注意font_path 的 simhei.ttf 确保你电脑系统里有这个字体Mac 系统建议改为 Arial Unicode.ttf print(正在生成词云图...) wc WordCloud( font_pathsimhei.ttf, width800, height400, background_colorwhite, max_words100 # 限制词云图上最多显示的词数画面更整洁 ).generate(wordcloud_input_text) # 7. 展示与保存 plt.figure(figsize(10, 5)) # 设置画布比例 plt.imshow(wc, interpolationbilinear) plt.axis(off) # 确保 data 目录存在复用前面的逻辑防错 import os os.makedirs(os.path.dirname(csv_path), exist_okTrue) output_img_path os.path.join(os.path.dirname(csv_path), wordcloud.png) plt.savefig(output_img_path, dpi150, bbox_inchestight) print(f 词云图已成功保存至: {output_img_path}) plt.show()词云图直观呈现高频词汇便于快速识别用户讨论热点为内容选题和运营策略提供数据参考。三、TikTok 评论抓取效率与稳定性提升策略基础流程跑通后实际生产环境中还需考虑以下几个关键问题请求频率控制除随机延迟外可引入令牌桶算法精确控制 QPS避免短时间内请求量过于集中。Cookie 自动刷新Cookie 失效是导致抓取中断的首要原因。建议将 Cookie 有效期监测纳入脚本逻辑到期前自动发出告警或触发更新流程。异常重试机制网络波动或接口报错时加入指数退避重试策略如最多重试 3 次每次等待时间翻倍可大幅提高任务完成率。数据去重翻页过程中偶有评论重复返回建议以comment_id为唯一键在写入 CSV 前进行去重过滤。日志记录使用 Pythonlogging模块记录每次请求的状态码、抓取数量和异常信息方便排查问题和统计进度。四、常见问题Q没有 TikTok 账号可以抓取评论吗A部分接口无需登录即可访问但稳定性较差建议使用有效账号的 Cookie 以提高成功率。Q能否同时抓取多个视频的评论A可以。建议使用 Pythonconcurrent.futures模块实现多线程并发抓取同时注意控制总体请求速率避免触发平台风控。Q如何抓取二级回复子评论A在请求参数中额外传入comment_id即可调取对应的回复列表接口逻辑与根评论完全一致可直接复用翻页代码。五、总结本文完整演示了使用 Python 进行 TikTok 评论数据抓取的 8 个核心步骤从安装依赖、分析接口机制到配置代理、解析存储、翻页抓取以及最终的评论关键词分析。针对实际运营中的稳定性挑战我们也补充了请求频控、Cookie 管理、异常重试等工程化实践。TikTok 数据抓取的真正价值在于数据应用——将评论关键词与情感分析、用户画像、内容策略相结合才能将原始数据转化为可执行的业务洞察。