如何在 Python 中无需 API Key 抓取 Twitter/X(2026 指南)

发布: (2026年4月4日 GMT+8 03:52)
5 分钟阅读
原文: Dev.to

看起来您只提供了来源链接,而没有提供需要翻译的正文内容。请把要翻译的文本(包括标题、段落、列表等)贴在这里,我会按照要求保留链接、代码块和格式进行简体中文翻译。谢谢!

为什么使用 Scweet 而不是官方 API?

Twitter/X 的官方 API 现在起价 $200 / 月 仅用于读取推文。免费层是 仅写 —— 你可以发推,但无法搜索、拉取时间线,或读取除自己个人资料外的任何内容。

Scweet 通过复用网页应用内部使用的相同 GraphQL 端点,绕过了 API 密钥的需求。它使用与你的浏览器相同的 cookie(auth_tokenct0)发送 HTTP 请求,因此在 X 看来这就是普通的浏览器活动。

  • 不需要无头浏览器、Selenium 或 Playwright。
  • 本地运行 $0(或在托管云版本上约 $0.30 / 1 000 条推文)。
  • 只需一个免费 X 账户,加上可选的代理即可使用。

Twitter/X API pricing (2026)

级别价格 (美元)您将获得什么
免费$0仅写入。每月 500 条推文。无搜索,无读取权限。唯一端点:GET /2/users/me
基础$200/月每月 15 000 次读取请求。7 天的搜索历史
专业$5 000/月100 万条推文。完整存档搜索
企业$42 000+/月定制,合规流
按量付费(2026年2月)~ $575/月(相当于基础计划使用量)不比基础计划更便宜

来源:TechCrunch, X Developer Community, xpoz.ai pricing breakdown.

安装

pip install -U scweet

获取 auth_token

  1. 在 Chrome 或 Firefox 中登录 x.com
  2. 打开开发者工具 (F12) → ApplicationCookieshttps://x.com
  3. 找到 auth_token cookie 并复制其值。

Scweet 会自动从该 cookie 引导 ct0 CSRF 令牌,因此你只需要 auth_token。它的有效期可达数周至数月;当它过期时,Scweet 会抛出 AuthError

基本用法 (Python)

from Scweet import Scweet

s = Scweet(
    auth_token="YOUR_AUTH_TOKEN",
    proxy="http://user:pass@host:port"   # optional but recommended
)

# Search for tweets about Bitcoin from 2025 onward
tweets = s.search(
    "bitcoin",
    since="2025-01-01",
    limit=200,
    save=True               # writes results to a CSV file
)

print(f"Collected {len(tweets)} tweets")

您可以更改输出格式:

s.search("bitcoin", limit=100, save=True, save_format="json")   # JSON
s.search("bitcoin", limit=100, save=True, save_format="both")   # CSV + JSON

每条推文记录包括:

  • tweet_id, timestamp, text, likes, retweets, comments, tweet_url
  • user (screen_name, name)
  • image_links
  • 完整的原始 GraphQL 负载(如有需要)

CLI 用法(无 Python 代码)

scweet --auth-token YOUR_AUTH_TOKEN \
       --proxy http://user:pass@host:port \
       search "bitcoin" --since 2025-01-01 --limit 200 --save

可用端点

EndpointDescription
s.search()全文推文搜索
s.get_profile_tweets(usernames, limit=…)用户自己的推文时间线
s.get_followers(usernames, limit=…)粉丝列表
s.get_following(usernames, limit=…)正在关注的列表
s.get_user_info(usernames)个人简介、粉丝数、认证状态、创建日期

所有方法接受 用户名列表,支持批量请求。还提供了异步变体(asearch()aget_profile_tweets() 等)。

多账户池化

对于更大的抓取,你可以轮换多个账户,每个账户都有自己的代理:

[
  {
    "username": "account_1",
    "cookies": { "auth_token": "TOKEN_1" },
    "proxy": "http://user1:pass1@host1:port1"
  },
  {
    "username": "account_2",
    "cookies": { "auth_token": "TOKEN_2" },
    "proxy": "http://user2:pass2@host2:port2"
  }
]
s = Scweet(cookies_file="cookies.json")
tweets = s.search("AI startups", limit=10000, save=True)

Scweet 将池状态存储在 SQLite 中(leases、heartbeats、daily counters、cooldowns),并在账户达到限制时自动进行故障转移。

恢复中断的抓取

tweets = s.search("AI startups", limit=10000, save=True, resume=True)

resume=True 会从上一次运行结束的地方继续。

Apify actor 集成(无代码)

Scweet 也可以作为 Apify actoraltimis/scweet)使用。托管版提供免费层(每日最多 1 000 条推文),并可按 $0.25 / 1 000 条推文 的价格扩展至数百万条。

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("altimis/scweet").call(run_input={
    "search_query": "bitcoin",
    "max_items": 500,
})
tweets = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Got {len(tweets)} tweets")

这对于管道、cron 作业或 n8n/Zapier 工作流非常便利,无需管理 Python 依赖或 Cookie。

Resources

  • GitHub 仓库: (MIT 许可证,250+ 测试)
  • PyPI 包: pip install scweet
  • Apify actor: (托管,无代码)
  • 完整文档:
0 浏览
Back to Blog

相关文章

阅读更多 »