作者:Sorsa 编辑部
2026 年 7 月更新:加入 100 次免费请求入门优惠,把 Sorsa 定价按每 1,000 为基准重述,并反映 2026 年 4 月 20 日变更后官方 X API 的按量付费费率。
要点: 一个 Twitter 图片爬虫从公开 X 帖子里提取媒体文件:照片、视频和 GIF。2026 年的实际路径是一个把每条推文的媒体 URL 在结构化响应里返回的 API,你再据以下载。浏览器工具一次处理一条帖子;一个 API 处理整个资料、搜索和批量作业。
多数爬取 Twitter 图片的指南把你指向两条死路之一:一个抓单条帖子的浏览器按钮,或一个下次 X 改前端就坏的 Python 脚本。两者都不扩展,官方 X API 现在又按抓取的资源计费,所以从数千条帖子拉媒体很快变贵。
Sorsa API,一个替代性的 Twitter/X API 提供方,走一条不同的路。Sorsa 把每条推文的媒体放在一个结构化的 entities 数组里返回,所以单次请求就能浮现一次搜索查询或一条资料时间线里的每个照片和视频 URL,你再按自己的节奏下载文件。计费按请求(1 次调用 = 1 次请求),所以媒体采集在批量基准上从每 1,000 条推文 $0.02 起,作者资料在每条推文响应里免费随附。速率限制是每个套餐固定的每秒 20 次请求,认证是请求头里一个 API 密钥、而非 OAuth,头 100 次请求免费、无需绑卡。在读取密集的媒体工作上,那落到比官方 API 便宜至多 50 倍。
本指南覆盖一个媒体爬虫实际返回什么、带可运行代码的可用 API 路径、为什么流行的自己动手方法在 2026 年失败,以及真实的成本算术。
目录
- 一个 Twitter 图片爬虫做什么
- 如何下载 Twitter 媒体:那些方法
- 如何通过 API 获取 Twitter 媒体
- 自建一个爬虫,以及为何会坏
- 限制、成本和边缘情况
- 这在实战中是什么样
- 开始上手
- 常见问题
一个 Twitter 图片爬虫做什么 {#what-a-twitter-image-scraper-does}
一个 Twitter 图片爬虫收集附在公开 X 帖子上的媒体,包括照片、视频和动图 GIF,连同每条帖子周围的元数据。实际上它做两件不同的事:先找到媒体 URL(从一条推文、一个资料、一个话题标签或一次搜索),然后从那些 URL 下载底层文件。
那两步之分要紧,多数工具却把它模糊掉。数据层以像 JSON 这样的结构化格式返回链接和帖子细节。下载层从 X 的媒体服务器取回实际字节。一个好 API 干净地给你第一层;第二层是你掌控的一次朴素 HTTP 下载。
X 存储三种你能从公开帖子收集的媒体类型。照片是从 pbs.twimg.com CDN 提供的静态图像。视频是 MP4 文件。动图 GIF 在 X 上其实不是 GIF:平台把它们转成短的、无声的 MP4 片段,所以作为视频实体、而非一个单独类型回来。每个媒体项还携带一个预览或缩略图 URL,在你想要一个轻量引用而非完整文件时有用。
随每条帖子而来的信息往往和图像本身一样有价值:作者资料、帖子文本、时间戳和互动计数(点赞、转发、回复、浏览)。视觉情感分析、品牌监控和数据集构建都依赖把媒体与那份上下文配对、而非只是把文件倒进一个文件夹。
如何下载 Twitter 媒体:那些方法 {#how-to-download-twitter-media-the-methods}
从 X 获取媒体存在四类方法,按规模、按谁在干活干净地分类。单帖下载器适合一条推文;API 适合资料、搜索和周期性作业。
| 方法 | 最适合 | 规模 | 需要认证 | 输出 |
|---|---|---|---|---|
| 浏览器下载器(粘一个链接) | 一条帖子、偶尔使用 | 单条推文 | 无 | 仅文件 |
| 浏览器扩展 | 随意的手动采集 | 小 | 无 | 仅文件 |
| 开源脚本(gallery-dl、yt-dlp) | 技术用户、归档 | 中、脆弱 | 你登录的 cookie | 文件加一些元数据 |
| 托管 API | 资料、搜索、批量、自动化 | 高、稳定 | 一个 API 密钥 | 结构化 JSON 加媒体 URL |
那张表的文字版:如果你需要一次一张图,一个粘链接工具就行。一旦你需要一个账号的每张图、一个话题标签的所有媒体,或一个每天不出错跑的作业,你就需要结构化数据和分页,这正是一个 API 提供的。一个不写代码就测试数据的免代码选项是媒体下载器工具,该工具通过本指南其余部分所用的同一个 API 从单条推文拉照片和视频。
要看媒体之外爬取方法的全貌,一个更广的如何爬取 Twitter指南和一篇 Twitter 爬虫对比深入覆盖那些取舍。
如何通过 API 获取 Twitter 媒体 {#how-to-get-twitter-media-via-api}
通过一个 API 获取媒体分五步:拿一个密钥、调用一个返回推文的接口、读每条推文上的 entities 数组、下载每个 link,以及分页以越过时间线上限。API 递给你 URL 和元数据;下载是你自己发的一次标准 HTTP 请求。
API 返回的每个推文对象都携带一个 entities 数组。每个条目有一个 type(photo、video 或 url)、一个 link(媒体 URL),和一个 preview(缩略图)。那个结构就是全部要害:
{
"id": "1782368585664626774",
"full_text": "Launch photos from this morning",
"created_at": "2026-05-01T10:30:00Z",
"entities": [
{
"type": "photo",
"link": "https://pbs.twimg.com/media/Gx1example.jpg",
"preview": "https://pbs.twimg.com/media/Gx1example.jpg?name=small"
}
],
"user": { "username": "nasa", "followers_count": 90000000 }
}
一条推文
调用单条推文接口,然后循环 entities 下载每个文件。API 密钥放进 ApiKey 请求头:
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://api.sorsa.io/v3"
tweet = requests.post(
f"{BASE}/tweet-info",
headers={"ApiKey": API_KEY},
json={"tweet_link": "https://x.com/nasa/status/1782368585664626774"},
).json()
for item in tweet.get("entities", []):
if item["type"] in ("photo", "video"):
url = item["link"]
data = requests.get(url).content
name = url.split("/")[-1].split("?")[0]
with open(name, "wb") as f:
f.write(data)
对全分辨率照片,请求原始尺寸。X 默认提供一个调整过大小的版本、并在 pbs.twimg.com URL 上暴露尺寸别名:thumb(150x150)、small(680x680)、medium(1200x1200,默认)、large(2048x2048)和 orig(4096x4096),如 X 开发者社区所记录。给一个照片 URL 追加 ?name=orig 来拉最大的已存版本。
整个资料
要收集一个账号的每张图和每个片段,用 next_cursor 翻遍用户推文接口、直到游标用尽。每页返回最多 20 条推文:
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": API_KEY}
def media_urls(username):
cursor = None
while True:
body = {"username": username}
if cursor:
body["next_cursor"] = cursor
page = requests.post(f"{BASE}/user-tweets", headers=HEADERS, json=body).json()
for tweet in page.get("tweets", []):
for item in tweet.get("entities", []):
if item["type"] in ("photo", "video"):
yield item["link"]
cursor = page.get("next_cursor")
if not cursor:
break
for url in media_urls("nasa"):
print(url)
一个话题标签或搜索
要为一个话题而非一个账号拉媒体,用一个查询通过 API 搜索推文,并用像 filter:images 或 filter:videos 这样的标准 X 操作符收窄到携带媒体的帖子:
body = {"query": "#sunset filter:images", "order": "latest"}
results = requests.post(f"{BASE}/search-tweets", headers=HEADERS, json=body).json()
在 X 高级搜索里有效的同样操作符在这里也有效。一份完整的 Twitter 搜索操作符速查表覆盖日期范围、语言过滤等等。
按 ID 批量
当你已经有一份推文 ID 列表时,批量接口在一次请求里接受其中最多 100 个、并把它们全部连同完整媒体和作者数据返回。一次批量调用算作对你配额的一次请求,成本优势正是在这里复利。
自建一个爬虫,以及为何会坏 {#building-your-own-scraper-and-why-it-breaks}
一个自己动手的爬虫对小的、一次性的作业可行。但在 2026 年,两条流行的 DIY 路径各撞上一堵硬墙:官方 API 教程做法实际上已死,基于 cookie 的爬虫则拿你的账号冒险、且止步于 3,200 条推文。
第一堵墙是经典教程。许多较老的指南仍告诉你安装 Tweepy、创建一个 Twitter 开发者账号,并用四个 OAuth 密钥拉一个用户的时间线。那条免费路径不再以那些指南描述的方式存在。X 在 2023 年移除了免费 API 访问,当前 API 又按资源收费,所以多数文章教的“免费 Tweepy 脚本”要么失败、要么悄悄变成一张计量账单。
第二堵墙是现代爬虫。今天标准的开源工具是 gallery-dl,能用、但带两个严重的玄机。它现在要求你从一个登录的 X 账号提取 auth-token cookie 并喂给工具,这违反 X 的条款、把那个账号置于真实的被封风险中。而且它继承了 X 的时间线上限:标准时间线视图对每个账号封顶在大约 3,200 条推文,所以更老的媒体就是没法这样获取。在我们跑过媒体作业的账号里,那是每次都出现的两个失败:一个死掉的会话和一堵 3,200 帖的墙。
一条 API 路径绕开两者。没有登录 cookie 会泄露,因为访问是一个服务端密钥、而非你的个人会话。资料时间线接口翻过时间线视图分页,所以你能把一个资料往回走到第一条帖子、而非止步于 3,200。如果你真正的需要是一份完整的账号历史、而非具体是其中的媒体,拉取完整推文历史端到端地覆盖那个工作流。
限制、成本和边缘情况 {#limits-cost-and-edge-cases}
自己通过官方 API 爬媒体与用一个按请求计费的 API 之间的成本差别很大,因为两个提供方按不同的单位计费。X 按抓取的资源收费;一个按请求计费的 API 按请求收费,而单次请求能携带最多 100 条推文连同其媒体和作者资料。
这是并排对比,用 2026 年 4 月 20 日 X 定价更新的当前费率:
| 官方 X API(按量付费) | Sorsa API | |
|---|---|---|
| 计费单位 | 每抓取资源 | 每请求(按请求计费) |
| 100 条推文含媒体 + 作者 | ~$1.50(100 帖按 $0.005 + 100 次作者读取按 $0.010),外加每个媒体读取 $0.005 | $0.00199,一次批量请求(Pro) |
| 响应里的媒体 URL | 计费(媒体:读取,每个 $0.005) | 含在推文对象里 |
| 响应里的作者资料 | 单独计费(每个 $0.010) | 免费包含 |
| 认证 | OAuth 2.0 + Bearer Token | 单个 API 密钥请求头 |
| 速率限制 | 随接口而变 | 固定每秒 20 次请求、每个套餐 |
| 每月读取上限 | 200 万次帖子读取 | 套餐配额(10K 到 500K 次请求) |
| 写动作(发帖、私信、关注) | 发帖和私信;关注/点赞/引用仅 Enterprise | 无,只读 |
朴素文字版的要点:读取 100 条推文连同其媒体和作者数据,在官方 API 的按资源模型上跑约 $1.50 或更多,对比 Sorsa 上单次按请求计费的请求。如果你的工作流涉及发帖、删除或发私信,那是官方 API 的地盘,那里的对比就没意义了。要以固定、可预测的价格读取并下载公开媒体,那正是 Sorsa 为之而建的。套餐定价页进一步拆解这个。
几个边缘情况决定这一切究竟是否行得通:
私密账号不可及。 受保护账号把帖子限于已批准粉丝。除非你是一个已认证粉丝,否则没有 API、爬虫或下载工具能获取一个受保护账号的媒体。这对官方 X API、Sorsa 和其他每种方法一律成立。
速率限制和重试。 如果你超过每秒 20 次请求,Sorsa 返回 429 Too Many Requests;修法是等一秒、重试,没有惩罚。批量接口首先就减少你需要多少次请求。
直接文件链接。 下载步骤是对 link 字段里 URL 的一次朴素 HTTP GET。照片解析到 pbs.twimg.com;视频文件更大,所以对大作业把视频流式写到磁盘、而非加载进内存。
合法性,简短地。 收集公开数据被广泛视为许可的,但 X 的条款限制爬取,下载的媒体仍属其创作者的版权。分析公开图像与再发布是不同的姿态,平台条款仍适用。这是一般信息、非法律意见;就你的具体用例向法律顾问核实。
这在实战中是什么样 {#what-this-looks-like-in-practice}
一个大约六人的品牌分析团队在一个熟悉的循环后走到这一步。他们为视觉情绪审查在归档一个品牌提及流里的活动图像和短片,一个跑在登录账号背后 gallery-dl 数据管道上的社交聆听工作流。会话不断在跑到一半时死掉,在最忙的用户名上他们又不断撞上 3,200 帖的墙,所以归档总是不完整、总有人在看着这个作业。
把采集搬到一个按请求计费的 API 移除了两个问题。他们分批从搜索和从资料时间线拉媒体 URL、按自己的节奏下载文件,并完全停止维护 cookie 会话。数据账单变成一个单一的固定月度数字,远低于按资源定价在那个量上本会花的钱。对像这样读取密集的媒体工作,按请求计费模型跑得便宜至多 50 倍。这个示例要点对处在同一处境的任何人都成立:瓶颈从来不是下载,而是喂它的那个脆弱数据层。
开始上手 {#getting-started}
看数据最快的方式是前面链接的免费媒体下载器工具:粘一个推文链接、工具就返回照片和视频,无需代码。要构建,拿一个密钥(头 100 次请求免费、无需绑卡,且没有应用审核或审批队列,所以搭建约需三分钟)。第一个调用是上面展示的单条推文接口。从那里,视作业换进资料或搜索接口。
值得记住的数字:媒体在批量基准上从每 1,000 条推文 $0.02 起(Starter、Pro 和 Enterprise 各为每 1,000 条 $0.049 / $0.02 / $0.018),头 100 次请求免费、无需绑卡,每个套餐固定每秒 20 次请求,媒体 URL 和作者资料含在每条推文响应里,以及把最多 100 条推文塞进一次请求的批量接口。完整套餐细节坐在上面链接的定价页上;API 参考指南记录了本指南里展示的每个字段。
常见问题 {#frequently-asked-questions}
你能从 Twitter/X 爬图片吗?
能。X 上的公开图片、视频和 GIF 可以通过一个浏览器工具、一个开源脚本或一个 API 收集。API 是可扩展的选项:它以结构化 JSON 返回每条推文的媒体 URL 和元数据,你从那些 URL 下载文件。除非你是一个已批准粉丝,否则私密和受保护账号无法被任何方法访问。
爬 Twitter 图片合法吗?
在许多司法辖区,收集公开可得的数据被广泛视为许可的,但 X 的服务条款限制爬取,你下载的任何媒体仍属发帖者的版权。为研究分析公开图像与商业再发布不同。这是一般信息、而非法律意见,所以就你的具体用例向一位合格律师确认。
你如何下载一个 Twitter 账号的所有图片?
翻遍账号的推文、读每一条上的媒体实体,然后下载每个照片和视频 URL。一个浏览器工具止步于一条帖子,多数开源爬虫止步于 3,200 条推文的时间线上限。一个分页 API 接口把资料走过那个上限、朝账号最早的帖子走,所以归档能完整。
你也能下载 Twitter 视频和 GIF 吗?
能。视频和 GIF 通过与照片相同的媒体实体而来。在 X 上,动图 GIF 存储为短的无声 MP4 片段,所以作为视频实体、而非一个单独的 GIF 类型返回。用 Sorsa,每条推文响应都包含其媒体 URL,所以一次请求就能一起返回照片、视频和 GIF-MP4,你从各自的链接下载每个文件。
爬 Twitter 媒体要花多少钱?
这取决于计费模型。官方 X API 按抓取的资源收费:每帖约 $0.005、每份作者资料 $0.010,外加媒体读取。Sorsa 按请求计费,折合媒体在批量基准上从每 1,000 条推文 $0.02 起,媒体 URL 和作者资料含在每条响应里。头 100 次请求免费、无需绑卡。对读取密集的媒体采集,按请求计费模型跑得便宜至多 50 倍。
你能从私密 Twitter 账号爬媒体吗?
不能。受保护账号把帖子限于已批准粉丝,而没有 API、爬虫或下载工具能在没有一个已认证粉丝会话时取回其媒体。这个限制对官方 X API、对 Sorsa 和对其他每种方法一律适用。只有公开账号和公开帖子能被收集。
审校:Keksich(Sorsa 创始人,X API 研究者)
本指南取材于运营 Sorsa API 的亲手工作、实时 API 文档,以及 2026 年 7 月编辑期间对照一手来源的核验。X 图像尺寸别名对照 X 开发者社区确认;官方 X API 按资源费率反映 2026 年 4 月 20 日的定价更新;时间线上限和 gallery-dl 认证 cookie 行为对照当前开源项目讨论核查。定价和接口细节对照 Sorsa 自己的定价和 API 参考文档核验。最后核验于 2026 年 7 月 8 日。