如何使用gallery-dl批量下载图像

假设你是个追星粉、或者单纯迷恋特特上的某个女菩萨、或者是个无限循环播放乔丹视频的球迷、或者单纯为了学习知识,丰富课外业余生活。那么你一定会有批量下载图片(包含视频)的需求,别告诉我你是挨个点的。

以前我这种需求不是很强烈,直到有一天我发现某个喜欢的人退网了,可能是被封杀,也有可能是号卖了,或者单纯不玩了。

这个时候,总是让人后悔没事前多下载点东西保存。

gallery-dl 就是个不错的图片下载工具。

且看下面的实践教程:

1. 安装

我用的 Arch linux,直接 paru 安装。

1paru -S gallery-dl

非常简单直接,别的发行版,或者操作系统,请看官方仓库 https://github.com/mikf/gallery-dl 说明。

2. 配置示例

以推特为例

 1➜  ~ cat .config/gallery-dl/config.json
 2{
 3  "extractor": {
 4    "base-directory": "~/Pictures/",
 5    "twitter": {
 6      "videos": true,
 7      "retries": 5,
 8      "sleep": "2.0-3.5",
 9      "sleep-429": 2,
10      "image-filter": "user is author",
11      "filename": "{author[name]}-{tweet_id}-{date:%Y%m%d_%H%M%S}-img{num}.{extension}"
12    }
13  }
14}
  • base-directory 下载后存放的目录
  • videos 下载示例,只下载图片就改为 false
  • retries 重试次数 5
  • sleep 下载间隔 2.0s 至 3.5s,太快了小心被封 ip,老实点为好
  • sleep-429 遇到 429 错误等待 2s
  • image-filter 是 gallery-dl 的图片属性过滤规则,通过 Python 表达式筛选需要下载的图片,可以写得很复杂。user is author 仅下载目标用户原创图片,未测试求证。
  • filename 文件名格式化成什么样子,谁也不想下载的图片命名乱七八糟的吧!

以上这些就包含核心配置,反正我就是这么写的。

至于其它平台,比如 instagram 是什么样的写法,需要看看官方的配置文档。平台反爬策略千千万,配置不一样完全能理解。

3. 下载测试

示例命令:gallery-dl -vv --cookies-from-browser firefox "https://x.com/zoe2496/media

其实上面的配置里面少了 cookies 部分,核心作用就是给 gallery-dl 提供有效的 X 账号登录凭证,让 gallery-dl 能“伪装”成你已登录的浏览器,下载需要授权的图片视频等内容。

--cookies-from-browser firefox 参数的含义,gallery-dl 自动从你的 Firefox 浏览器中提取已保存的 X 账号登录 cookies,无需你手动导出 Cookies 文件再配置。

比如你是 Linux,它就会从 /home/mephisto/.mozilla/firefox/5esrorfn.default-release/cookies.sqlite 这样类似的路径筛选出属于 x.com 域名的 Cookies,只要浏览器之前已登录 X 账号,Cookies 处于有效期(通常几天到几周),这样还是很贴心的。

我一般 Firefox 找到要下载的账号,然后后运行下面的命令下载:

 1➜  twitter gallery-dl -vv --cookies-from-browser firefox  "https://x.com/zoe2496/media"
 2[gallery-dl][debug] Version 1.31.1
 3[gallery-dl][debug] Python 3.13.11 - Linux-6.18.2-arch2-1-x86_64-with-glibc2.42
 4[gallery-dl][debug] requests 2.32.5 - urllib3 2.6.2
 5[gallery-dl][debug] Configuration Files ['${HOME}/.config/gallery-dl/config.json']
 6[gallery-dl][debug] Starting DownloadJob for 'https://x.com/zoe2496/media'
 7[twitter][debug] Using TwitterMediaExtractor for 'https://x.com/zoe2496/media'
 8[cookies][debug] Extracting cookies from /home/mephisto/.mozilla/firefox/5esrorfn.default-release/cookies.sqlite
 9[cookies][debug] Only loading cookies not belonging to any container
10[cookies][info] Extracted 1793 cookies from Firefox
11[urllib3.connectionpool][debug] Starting new HTTPS connection (1): x.com:443
12......此处省略......
13[twitter][debug] Sleeping 3.39 seconds (download)
14b[urllib3.connectionpool][debug] Starting new HTTPS connection (1): pbs.twimg.com:443
15[urllib3.connectionpool][debug] https://pbs.twimg.com:443 "GET /media/G9cQxetaYAIlyhR?format=jpg&name=orig HTTP/1.1" 200 921878
16/home/mephisto/Pictures/twitter/zoe2496/zoe2496-2006090615453544936-20251230_195048-img1.jpg
17[twitter][debug] Sleeping 3.26 seconds (download)
18[urllib3.connectionpool][debug] Starting new HTTPS connection (1): video.twimg.com:443
19[urllib3.connectionpool][debug] https://video.twimg.com:443 "GET /amplify_video/2006085163848269824/vid/avc1/1280x720/m-ShyiwCyNr8TJGh.mp4?tag=21 HTTP/1.1" 200 1299406
20/home/mephisto/Pictures/twitter/zoe2496/zoe2496-2006085231040946664-20251230_192924-img1.mp4
21[twitter][debug] Sleeping 2.32 seconds (download)
22[urllib3.connectionpool][debug] https://pbs.twimg.com:443 "GET /media/G9cJXkHawAASbGl?format=jpg&name=orig HTTP/1.1" 200 176456
23/home/mephisto/Pictures/twitter/zoe2496/zoe2496-2006082468605247944-20251230_191826-img1.jpg

看上面的输出,图片随机间隔 2.0-3.5 秒,都下载下来了,文件名也很规范,心里乐开花啊😄。

4. 其它

上面的会全部下载用户 media 的图片,你也可以自己写过滤器:

  • "image-filter": ["user is author", "width >= 1200", "height >= 800"] // 组合使用:原创 + 高清

我比较懒,精力有限,外网菩萨高手漫天飞,看看就好,我选择全部下载。

有志青年,要多花时间搞钱学真本领。友情提示,本文纯属技术分享,网络不是法外之地,低调行事,且行且珍惜。

最后修改于: Wednesday, December 31, 2025
欢迎关注微信公众号,留言交流;也欢迎使用微信小程序。

相关文章:

翻译: