TikTok Crawling (yt-dlp)技能使用说明
2026-03-29
新闻来源:网淘吧
围观:13
电脑广告
手机广告
使用 yt-dlp 抓取 TikTok 内容
yt-dlp 是一个命令行工具,用于从 TikTok 及众多其他网站下载视频/音频。
安装配置
# macOS
brew install yt-dlp ffmpeg
# pip (any platform)
pip install yt-dlp
# Also install ffmpeg separately for merging/post-processing
下载模式
单个视频
yt-dlp "https://www.tiktok.com/@handle/video/1234567890"
整个用户主页
yt-dlp "https://www.tiktok.com/@handle" \
-P "./tiktok/data" \
-o "%(uploader)s/%(upload_date)s-%(id)s/video.%(ext)s" \
--write-info-json
创建:
tiktok/data/
handle/
20260220-7331234567890/
video.mp4
video.info.json
多个用户主页
for handle in handle1 handle2 handle3; do
yt-dlp "https://www.tiktok.com/@$handle" \
-P "./tiktok/data" \
-o "%(uploader)s/%(upload_date)s-%(id)s/video.%(ext)s" \
--write-info-json \
--download-archive "./tiktok/downloaded.txt"
done
搜索、话题标签与音频
# Search by keyword
yt-dlp "tiktoksearch:cooking recipes" --playlist-end 20
# Hashtag page
yt-dlp "https://www.tiktok.com/tag/booktok" --playlist-end 50
# Videos using a specific sound
yt-dlp "https://www.tiktok.com/music/original-sound-1234567890" --playlist-end 30
格式选择
# List available formats
yt-dlp -F "https://www.tiktok.com/@handle/video/1234567890"
# Download specific format (e.g., best video without watermark if available)
yt-dlp -f "best" "https://www.tiktok.com/@handle/video/1234567890"
筛选过滤
按日期
# On or after a date
--dateafter 20260215
# Before a date
--datebefore 20260220
# Exact date
--date 20260215
# Date range
--dateafter 20260210 --datebefore 20260220
# Relative dates (macOS / Linux)
--dateafter "$(date -u -v-7d +%Y%m%d)" # macOS: last 7 days
--dateafter "$(date -u -d '7 days ago' +%Y%m%d)" # Linux: last 7 days
按数据指标与内容
# 100k+ views
--match-filters "view_count >= 100000"
# Duration between 30-60 seconds
--match-filters "duration >= 30 & duration <= 60"
# Title contains "recipe" (case-insensitive)
--match-filters "title ~= (?i)recipe"
# Combine: 50k+ views from Feb 2026
yt-dlp "https://www.tiktok.com/@handle" \
--match-filters "view_count >= 50000" \
--dateafter 20260201
仅元数据(不下载)
预览将下载的内容
yt-dlp "https://www.tiktok.com/@handle" \
--simulate \
--print "%(upload_date)s | %(view_count)s views | %(title)s"
导出为 JSON
# Single JSON array
yt-dlp "https://www.tiktok.com/@handle" --simulate --dump-json > handle_videos.json
# JSONL (one object per line, better for large datasets)
yt-dlp "https://www.tiktok.com/@handle" --simulate -j > handle_videos.jsonl
导出为 CSV
yt-dlp "https://www.tiktok.com/@handle" \
--simulate \
--print-to-file "%(uploader)s,%(id)s,%(upload_date)s,%(view_count)s,%(like_count)s,%(webpage_url)s" \
"./tiktok/analysis/metadata.csv"
使用 jq 进行分析
# Top 10 videos by views from downloaded .info.json files
jq -s 'sort_by(.view_count) | reverse | .[:10] | .[] | {title, view_count, url: .webpage_url}' \
tiktok/data/*/*.info.json
# Total views across all videos
jq -s 'map(.view_count) | add' tiktok/data/*/*.info.json
# Videos grouped by upload date
jq -s 'group_by(.upload_date) | map({date: .[0].upload_date, count: length})' \
tiktok/data/*/*.info.json
提示:如需进行更深度的分析和可视化,可将 JSONL/CSV 导出文件通过
pandas 加载到 Python 中适用于互动散点图、发布频率图表或跨创作者指标比较。
持续抓取
存档(跳过已下载内容)
该--download-archive参数可追踪已下载视频,实现增量更新:
yt-dlp "https://www.tiktok.com/@handle" \
-P "./tiktok/data" \
-o "%(uploader)s/%(upload_date)s-%(id)s/video.%(ext)s" \
--write-info-json \
--download-archive "./tiktok/downloaded.txt"
后续运行相同命令时,系统将自动跳过downloaded.txt文件中已记录的下载内容。
身份验证(私密/受限内容)
# Use cookies from browser (recommended)
yt-dlp --cookies-from-browser chrome "https://www.tiktok.com/@handle"
# Or export cookies to a file first
yt-dlp --cookies tiktok_cookies.txt "https://www.tiktok.com/@handle"
定时抓取(Cron任务)
# crontab -e
# Run daily at 2 AM, log output
0 2 * * * cd /path/to/project && ./scripts/scrape-tiktok.sh >> ./tiktok/logs/cron.log 2>&1
示例脚本scripts/scrape-tiktok.sh内容:
#!/bin/bash
set -e
HANDLES="handle1 handle2 handle3"
DATA_DIR="./tiktok/data"
ARCHIVE="./tiktok/downloaded.txt"
for handle in $HANDLES; do
echo "[$(date)] Scraping @$handle"
yt-dlp "https://www.tiktok.com/@$handle" \
-P "$DATA_DIR" \
-o "%(uploader)s/%(upload_date)s-%(id)s/video.%(ext)s" \
--write-info-json \
--download-archive "$ARCHIVE" \
--cookies-from-browser chrome \
--dateafter "$(date -u -v-7d +%Y%m%d)" \
--sleep-interval 2 \
--max-sleep-interval 5
done
echo "[$(date)] Done"
故障排除
| 问题现象 | 解决方案 |
|---|---|
| 返回空结果/未找到视频 | 添加--cookies-from-browser chrome参数——TikTok会对匿名请求进行频率限制 |
| 403禁止访问错误 | 访问频率受限。请等待10-15分钟,或使用Cookie/更换IP |
| "视频无法播放" | 区域限制。请尝试--geo-bypass或VPN |
| 视频带有水印 | 请检查-F列出的其他格式;部分格式可能无水印 |
| 下载速度缓慢 | 添加参数--concurrent-fragments 4可加速下载 |
| 个人主页显示视频数量少于预期 | TikTok API限制。请使用--playlist-end N明确指定数量,可尝试配合Cookie使用 |
调试模式
# Verbose output to diagnose issues
yt-dlp -v "https://www.tiktok.com/@handle" 2>&1 | tee debug.log
参考说明
关键选项
| 选项 | 说明 |
|---|---|
-o 模板 | 输出文件名模板 |
-P 路径 | 基础下载目录 |
--dateafter 日期 | 指定日期(YYYYMMDD)及之后的视频 |
--datebefore 日期 | 指定日期及之前的视频 |
--playlist-end N | 在N个视频后停止 |
--match-filters 表达式 | 根据元数据(观看次数、时长、标题)筛选 |
--write-info-json | 为每个视频保存元数据JSON文件 |
--download-archive 文件 | 跟踪下载记录,跳过重复项 |
--simulate/-s | 模拟运行,不实际下载 |
-j/--dump-json | 以JSON格式输出元数据 |
--cookies-from-browser 名称 | 使用浏览器的cookies |
--sleep-interval 秒 | 下载之间的等待时间(避免频率限制) |
输出模板变量
| 变量 | 示例输出 |
|---|---|
%(id)s | 7331234567890 |
%(uploader)s | 用户名 |
%(upload_date)s | 20260215 |
%(title).50s | 标题的前50个字符 |
%(view_count)s | 1500000 |
%(like_count)s | 250000 |
%(ext)s | mp4 |
文章底部电脑广告
手机广告位-内容正文底部


微信扫一扫,打赏作者吧~