WEIR

推特爬虫 2026:还能用的 4 种方法,附 Python 代码

推特爬虫 2026 年还怎么做:官方 API、爬虫库、账号存档、按条计费 API 各花多少钱、会在哪里失效,附实测的 Python 标准库脚本,自动翻页并导出 CSV。


发布于 · 更新于 · 阅读约 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 日,它的价格页面列出这些读取价格:

$0.005每读一条推文
$0.010每个用户资料或粉丝
300 万每月推文读取上限,再多要谈企业版

价格页面写着“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 条推文。论文那一项:

读取 5 万条推文,2026 年 10 月
X 官方 API$250
Weir,$20 套餐约 $8.75

$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(英文)。

参考来源

均为英文页面: