首页 > 代码

能批量下载 X(Twitter)公开视频的 Python 版

能批量下载 X(Twitter)公开视频的 Python 版。核心用的是 yt-dlp,它是一个活跃维护的开源下载器,支持大量站点:
先装环境:


pip install -U yt-dlp

下面是完整脚本说明:
从 C:\xvideo\urls.txt 读取 X 链接,一行一个
下载到 C:\xvideo\downloads
已存在的跳过
失败写入 failed.txt
文件名自动带上发布日期、作者、标题、ID
只适合你有权访问的公开内容。
python代码:


# -*- coding: utf-8 -*-
from pathlib import Path
import yt_dlp
import time

# =========================
# 配置区
# =========================
URL_FILE = Path(r"D:\python\X_downloader\urls.txt")
OUT_DIR = Path(r"D:\python\X_downloader\downloads")
FAILED_FILE = Path(r"D:\python\X_downloader\failed.txt")

# 是否使用浏览器 cookies
USE_BROWSER_COOKIES = False
BROWSER_NAME = "chrome"   # chrome / edge / firefox

# 下载间隔
SLEEP_SECONDS = 1

OUT_DIR.mkdir(parents=True, exist_ok=True)
FAILED_FILE.parent.mkdir(parents=True, exist_ok=True)


def read_urls(file_path: Path):
    if not file_path.exists():
        print(f"链接文件不存在: {file_path}")
        return []
    lines = file_path.read_text(encoding="utf-8", errors="ignore").splitlines()
    urls = []
    seen = set()
    for line in lines:
        u = line.strip()
        if not u or u.startswith("#"):
            continue
        if u not in seen:
            seen.add(u)
            urls.append(u)
    return urls


def append_failed(url: str, reason: str):
    with FAILED_FILE.open("a", encoding="utf-8") as f:
        f.write(f"{url}\t{reason}\n")


def download_with_format(url, fmt):
    ydl_opts = {
        "outtmpl": str(OUT_DIR / "%(upload_date)s_%(uploader)s_%(title).120s_%(id)s.%(ext)s"),
        "format": fmt,
        "noplaylist": True,
        "ignoreerrors": False,
        "retries": 3,
        "fragment_retries": 3,
        "continuedl": True,
        "overwrites": False,
        "nooverwrites": True,
        "windowsfilenames": True,
        "quiet": False,
    }

    if USE_BROWSER_COOKIES:
        ydl_opts["cookiesfrombrowser"] = (BROWSER_NAME,)

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download([url])


def main():
    urls = read_urls(URL_FILE)
    if not urls:
        print("没有读取到任何链接。")
        return

    print(f"共 {len(urls)} 个链接,开始下载...")

    # 不装 ffmpeg 时,优先尝试单文件格式
    trial_formats = [
        "best[ext=mp4]",   # 优先单文件 mp4
        "best",            # 再退一步,任意单流最佳
    ]

    for i, url in enumerate(urls, 1):
        print(f"\n[{i}/{len(urls)}] {url}")
        success = False
        last_err = ""

        for fmt in trial_formats:
            try:
                print(f"尝试格式: {fmt}")
                download_with_format(url, fmt)
                success = True
                break
            except Exception as e:
                last_err = str(e).replace("\n", " ")[:500]
                print(f"该格式失败: {last_err}")

        if not success:
            print(f"失败: {last_err}")
            append_failed(url, last_err)

        time.sleep(SLEEP_SECONDS)

    print("\n全部处理完成。")


if __name__ == "__main__":
    main()


  • 用python批量提取wordpress文章标题关键词,再全自动给相关文章打标签
  • 文章很多,相关文章也很多,用标签相互关联起来,有利于访问者也有利于seo, 靠纯手工应对操作,会很快崩溃!所以 […]

  • 彻底删除wordpress里的global-styles-inline-css
  • <style id='global-styles-inline-css' type= […]

  • 服务器上mysql数据库很多,某个库把整台服务器拉爆了,如何定位找到罪魁?
  • 服务器上mysql数据库很多,某个数据库把整台服务器拉爆了,如何定位找到罪魁? 先在 MySQL 里把“正在烧 […]

  • 极速打包几百万文件成.zip,比传统方式快几十倍
  • 假如,一个文件夹里面有几十上百万张图片,要把这个文件夹打包成.zip,按传统的windows自带的工具压缩或普 […]

  • Rufus是什么?为什么很多人推荐
  • Rufus 是一个非常流行的Windows 平台下用于创建启动U盘(Bootable USB)的免费工具。官网 […]

  • 批量设置wordpress文章分类,把文章 ID 区间为 1256869 到 1257421批量设置分类为 ID =5
  • 将 cuwen.wp_posts 中 文章 ID 区间为 1256869 到 1257421(含) 的文章批量 […]