网淘吧来吧,欢迎您!

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)s7331234567890
%(uploader)s用户名
%(upload_date)s20260215
%(title).50s标题的前50个字符
%(view_count)s1500000
%(like_count)s250000
%(ext)smp4

完整模板参考 →

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第326320名访客 今日有221篇新文章/评论