推特爬虫 2026:还能用的 4 种方法,附 Python 代码
推特爬虫 2026 年还怎么做:官方 API、爬虫库、账号存档、按条计费 API 各花多少钱、会在哪里失效,附实测的 Python 标准库脚本,自动翻页并导出 CSV。
Tarun Khatri
发布于 · 更新于 · 阅读约 7 分钟 · Read in English
推特爬虫在 2026 年还有四条路:官方 API、登录型爬虫库、账号存档和按条计费 API。
这篇写给要把 X(推特)推文放进表格或数据集的人。你会看到每种方法的成本和弱点,以及一段实测过的 Python 脚本。脚本用的 Weir 是我们自己做的 API,这一点先说在前面。
不用 X 账号,也不用 cookie,运行这一条就能拿到推文:
curl https://api.weirapp.io/v1/x/search \
-H "Authorization: Bearer $WEIR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "Artemis", "fromUsers": ["NASA"], "limit": 5}'
2026 年推特爬虫的 4 种方法对比
每种方法都在花钱、维护和风险之间取舍。截至 2026 年 10 月:
| 方法 | 你需要 | 读取成本 | 会坏在哪 |
|---|---|---|---|
| X 官方 API | 开发者账号 | 每条 $0.005 | 预算 |
| 开源爬虫库 | 已登录的 X 账号 | 不花钱 | 代码和账号 |
| 你的 X 存档 | 你自己的账号 | 免费 | 只有你的推文 |
| 按条计费 API | 一个 API Key | 每条 1 Weir 积分 | 依赖第三方 |
后面的步骤用的是第四种。
1. X 官方 API
要读别人的推文,X 自己的 API 是官方认可的途径。2026 年 10 月 25 日,它的价格页面列出这些读取价格:
价格页面写着“No subscriptions”(没有订阅),所以讲每月 $100 Basic 套餐的教程已经过时。
它适合要发推或查完整历史的人。Tweepy 和 X 的 xdk SDK 都调用这个 API,价格相同。完整价格见推特 API 费用详解。
2. 开源爬虫库:snscrape、twint、twikit、twscrape
这些库调用 x.com 网页版的内部接口,所以不需要 API Key。2026 年 10 月 25 日,它们在 GitHub 和 PyPI 上的状态:
- snscrape 最后一次发布是 2023 年 6 月,#996 号问题“All Twitter scrapes are failing”至今没有关闭。
- twint 的仓库已经归档,2020 年之后没有新版本。
- twikit 最后发布于 2025 年 2 月,2026 年那些 bug 的修复都还没合并。
- twscrape 仍在维护,但说明文档写明它需要已授权的 X 账号。
还能用的库都要用某个账号的登录 cookie。风险由这个账号承担,X 一改网页版,代码就会失效。
各个库坏在哪里,详见 twikit 和 twscrape 的替代方案(英文)。
3. 只要自己的推文:下载 X 账号存档
只需要自己账号的数据,就不必写爬虫。X 帮助中心说明,存档在“设置和隐私”、“账号”、“你的 X 数据”里申请,准备可能要几天。
推特数据存档怎么看讲了怎么把它转成 CSV。
4. 按条计费、不用登录的 API
托管 API 替你访问 X,按返回的结果计费,你只需要一个 Key。Weir 是其中之一,由我们运营:只读,只返回公开数据,每月送 5,000 免费积分。
不想写代码,也可以在 Cherry Studio 里接入 Weir,直接用中文提问。
第 1 步:拿到 Key,用 Python 发出第一次搜索
免费注册,无需绑卡,创建一个 Key,在终端里设置好:
export WEIR_API_KEY="weir_live_..."
在 scrape_x.py 开头写一个函数,发送请求体,返回解析好的一页:
import csv, json, os, time, urllib.error, urllib.request
URL = "https://api.weirapp.io/v1/x/search"
HEADERS = {"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}",
"Content-Type": "application/json"}
def fetch_page(body):
request = urllib.request.Request(URL, json.dumps(body).encode(), HEADERS, method="POST")
try:
with urllib.request.urlopen(request, timeout=60) as response:
return json.load(response)
except urllib.error.HTTPError as error:
if error.code != 429: # 402 表示积分用完:停下,不要重试
raise
time.sleep(int(error.headers.get("Retry-After", "5")))
return fetch_page(body) # 请求太快:等一会儿,再发同一个请求
第 2 步:选好要爬什么
加上搜索请求体。每个字段都来自 API 的 schema,至少要有一个搜索字段,比如 query 或 fromUsers:
BODY = {
"query": "Artemis", # 必须全部出现的词
"fromUsers": ["NASA"], # 可选:只看这些账号
"since": "2026-10-01T00:00:00Z", # UTC 时间
"until": "2026-10-25T00:00:00Z", # 不含这一天
"minLikes": 100, # X 自己的筛选,是近似值
"language": "en", # 中文推文用 "zh"
"sort": "latest", # 或 "top"
"limit": 20, # X 每页大约给 20 条
}
minLikes 用的是 X 自己的计数,可能滞后。我们测试时把下限设成 6,000,结果漏掉了两条点赞早已超过下限的 NASA 推文。下限必须精确的话,自己再查一遍 likeCount。
第 3 步:一直翻页,直到 nextCursor 为 null
把 meta.nextCursor 原样传回去,只有它为 null 时才停:
def search_pages(body, max_pages=10):
cursor = None
for _ in range(max_pages): # 限制调用次数,也就限制了花费
page = fetch_page({**body, "cursor": cursor} if cursor else body)
yield from page["data"]
cursor = page["meta"].get("nextCursor")
if not cursor: # 只有 null 表示结束
return
max_pages 给翻页设了上限,也就给账单设了上限。我们那次很窄的测试搜索,最后一页是空的,扣 1 积分,返回 null。
第 4 步:把推文保存为 CSV
在文件末尾加上写 CSV 的代码,然后运行 python scrape_x.py:
FIELDS = ["id", "createdAt", "username", "text", "likeCount",
"retweetCount", "replyCount", "viewCount", "url"]
with open("posts.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=FIELDS, extrasaction="ignore")
writer.writeheader()
for post in search_pages(BODY, max_pages=10):
writer.writerow({**post, "username": post["author"]["username"]})
我们在 2026 年 10 月 25 日通过 Weir 的 MCP 工具 search_x 跑了同一个搜索,limit 设为 5。返回两页,每页 5 条,每页扣 6 积分。第一条,删减后如下:
{
"id": "2113776971603689874",
"text": "We are not slowing down. 🚀\n\nOur Artemis III mission will send four astronauts ...",
"url": "https://x.com/NASA/status/2113776971603689874",
"createdAt": "2026-10-23T23:37:56.000Z",
"author": { "username": "NASA" },
"likeCount": 7061,
"retweetCount": 926,
"replyCount": 300,
"viewCount": 1239075
}
id 要当文本保存。X 的 ID 太长,表格软件当成数字会丢掉后几位。
推特数据采集要花多少钱?
一次搜索调用扣 1 积分,每条推文再扣 1 积分,X 每页大约给 20 条:
- 按话题导出 1,000 条推文: 50 次调用,共 1,050 积分。
- 每天拉取一个账号: 每天最多 20 条新推文,约 22 积分。
- 论文用的 5 万条推文: 约 52,500 积分。
每月 5,000 免费积分大约够读 4,700 条推文。论文那一项:
$20(美元)的套餐有 120,000 积分,永不过期。
推特数据爬取合法吗?
本文不构成法律建议。下面只讲 X 的条款怎么写,以及美国的两个案子怎么判。
X 的条款禁止爬取。 2026 年 10 月 9 日生效的条款写明,未经 X 事先书面同意,任何形式、任何目的的爬取都被明确禁止。
条款还规定:违反条款、又在 24 小时内请求超过 100 万条推文的,按每 100 万条 $15,000 赔偿。
X 诉 Bright Data。 2024 年 5 月,法官 William Alsup 驳回了 X 的起诉,X 指控 Bright Data 抓取并出售公开推文。法官认为这些爬取指控和美国版权法冲突,还警告这会造成损害公众利益的“信息垄断”。
后来 X 恢复了部分关于服务器负载的指控,双方在 2025 年 6 月和解。
hiQ 诉 LinkedIn。 2022 年,美国第九巡回上诉法院认为,抓取公开资料是否违反美国反黑客法,存在重大疑问。之后初审法院认定,hiQ 通过爬取和虚假账号违反了 LinkedIn 的用户协议,hiQ 以 $500,000 的判决和解。
两个案子都不代表爬虫就安全。它们讨论的都是公开数据,而 hiQ 的虚假账号对它不利。
什么时候不适合用 Weir
- 你要发推或回复。 Weir 只读,官方 X API 可以写入。
- 你需要 X 本身的许可。 Weir 没有得到 X 的授权,访问方式可能变化。
- 你只看最低单价。 TwitterAPI.io 标价每 1,000 条推文 $0.15,比我们的小额套餐便宜。
- 你只要自己的推文。 账号存档免费。
跑不通怎么办
KeyError或401: 当前终端没设置 Key,或者 Key 已被撤销。- 第二页返回
400: 请求体变了,cursor 只认它自己的那个请求。 - CSV 是空的: 去掉
minLikes,或者放宽日期。 - Excel 打开后中文乱码: 把
encoding改成"utf-8-sig"。
常见问题
推特爬虫免费吗?
部分免费。开源爬虫库不花钱,但会让登录的账号承担风险。自己的账号存档免费。Weir 每月 5,000 免费积分大约够读 4,700 条推文,无需绑卡。
用推特爬虫会被封号吗?
有这个风险。twscrape 的说明文档写明需要已授权的账号,还提醒 X 的条款不鼓励使用多个账号。按条计费的 API 不用你的账号,这个风险就不在你身上。
不登录能爬推特数据吗?
自己做很难稳定:不需要登录的 snscrape 从 2023 年 6 月起就失效了。托管 API 只需要它的 Key。
能爬推特粉丝列表吗?
能,限公开账号。X 官方 API 每个粉丝 $0.010,Weir 每个账号 1 积分。代码见导出推特粉丝到 CSV(英文)。
参考来源
均为英文页面:
- X API 价格(2026 年 10 月 25 日核对):https://docs.x.com/x-api/getting-started/pricing
- X 服务条款,2026 年 10 月 9 日生效(Wayback 存档,2026 年 10 月 17 日):https://web.archive.org/web/20261017135543/https://x.com/en/tos
- X 帮助中心:下载存档(Wayback 存档,2026 年 10 月 15 日):https://web.archive.org/web/20261015124209/https://help.x.com/en/managing-your-account/how-to-download-your-x-archive
- PyPI 上的 Tweepy 4.17.0 和 xdk 0.10.6(10 月 25 日核对):https://pypi.org/project/tweepy/ 和 https://pypi.org/project/xdk/
- snscrape 第 996 号问题(10 月 25 日核对):https://github.com/JustAnotherArchivist/snscrape/issues/996
- twint,已归档:https://github.com/twintproject/twint
- twikit(10 月 25 日核对):https://github.com/d60/twikit
- twscrape 说明文档(10 月 25 日核对):https://github.com/vladkens/twscrape
- Skadden 谈 X 诉 Bright Data(2024 年 5 月 21 日):https://www.skadden.com/insights/publications/2024/05/district-court-adopts-broad-view
- Technology & Marketing Law Blog(2024 年 5 月 13 日):https://blog.ericgoldman.org/archives/2024/05/elon-musks-gifts-to-web-scrapers-guest-blog-post.htm
- Technology & Marketing Law Blog(2025 年 1 月 13 日):https://blog.ericgoldman.org/archives/2025/01/catching-up-on-the-heavyweight-scraping-battle-between-x-and-bright-data-guest-blog-post.htm
- Bloomberg Law 报道和解(2025 年 6 月 23 日):https://news.bloomberglaw.com/ip-law/musks-x-settles-data-scraping-dispute-against-israeli-data-firm
- Proskauer 谈 hiQ 诉 LinkedIn(2022 年 12 月 8 日):https://www.proskauer.com/blog/hiq-and-linkedin-reach-proposed-settlement-in-landmark-scraping-case
- TwitterAPI.io 价格(10 月 25 日核对):https://twitterapi.io/pricing
- Weir 计费:https://docs.weirapp.io/billing