跳到主要内容
AI教程

使用 Playwright 构建私密的无 API X 抓取工具

了解如何安装和使用 x-scraper-no-api:这是一款基于 Node.js 和 Playwright、可自行托管的 CLI 工具,无需 API 密钥或第三方服务,即可将公开的 X 搜索结果、时间线和帖子回复导出为 JSON、JSONL、CSV 或 Markdown。

使用 Playwright 构建私密的无 API X 抓取工具

x-scraper-no-api 的功能

x-scraper-no-api 将本地完成身份验证的 Chromium 浏览器转换为用于采集 X 公开内容的数据管道。手动登录一次后,此命令行工具即可收集搜索结果、公开时间线,以及包含公开回复的帖子。

结果会直接以 json、jsonl、csv 或 md 格式写入你的计算机。该项目不使用 X API 密钥、托管式抓取服务、代理或第三方中继。

主要功能

  • 无需 API 密钥或开发者账户:使用你自己的浏览器会话,而不是官方 API 方案。
  • 手动身份验证:由你自行登录,工具不会处理你的密码或双重身份验证代码。
  • 持久化会话:浏览器配置文件存储在 ~/.xscraper/ 中,因此后续运行可以使用无头模式。
  • 高级 X 搜索:使用 from:、since:、until:、min_faves:、filter:media 和 lang: 等运算符。
  • 适合 LLM 的输出:Markdown 针对节省令牌的 AI 代理上下文进行了设计,而 JSON、JSONL 和 CSV 则支持程序化工作流。
  • 弹性解析:抓取器捕获 X 自有前端发送的结构化 GraphQL 数据,而不是依赖脆弱的 HTML 类名。
  • 合理的访问限制:运行过程采用类似人工的节奏、严格的项目数量上限,并在 X 发出压力信号时自动退避。
  • 代理支持:代码库包含适用于 OpenClaw、Hermes 及其他支持 CLI 的代理的 Skill。

安装与首次设置

1. 安装 macOS 构建工具

在 macOS 上安装 Xcode Command Line Tools,因为原生依赖可能需要这些工具。

xcode-select --install

2. 安装 Node.js

使用官方安装程序或版本管理器安装 Node.js 18 或更高版本。项目要求 Node.js 18 或更高版本。访问 Node.js 下载页面开始安装。

3. 从 GitHub 安装抓取器

创建工作目录,进入该目录,然后直接从代码库安装软件包:

mkdir -p 'xscraper' && cd 'xscraper' && npm install github:JoinArtisanVent/x-scraper-no-api

4. 为 Playwright 安装 Chromium

下载 Playwright 使用的 Chromium 浏览器:

npx playwright install chromium

5. 手动登录

启动一次性登录流程:

npx xscraper login

系统会打开一个真实的浏览器窗口。自行登录 X,并完成任何要求的双重身份验证。工具会将生成的浏览器会话本地存储在 ~/.xscraper/ 中,不会接收或处理你的凭据。

请使用一个你愿意用于浏览的 X 账户。该工具仅支持公开帖子,不支持受保护账户、私信或受限制内容。

基本用法

使用高级运算符搜索 X

将完整的 X 搜索表达式传递给 search 命令。以下示例查找日期之后发布、至少获得 500 个赞的 OpenAI 帖子,并返回 Markdown:

xscraper search "from:openai since:2026-01-01 min_faves:500" --limit 50 --format md

该工具支持 X 的高级搜索语法,包括账户筛选、日期范围、语言筛选、媒体筛选和互动量阈值。

请求“最新”选项卡

搜索结果通常使用默认搜索行为。需要“最新”选项卡时,添加 --latest:

xscraper search "ai agents" --latest --limit 25

导出公开时间线

对公开用户名使用 timeline。以下示例将 CSV 输出写入文件:

xscraper timeline @nasa --limit 100 --format csv -o nasa.csv

收集帖子及其公开回复

对 X 帖子 URL 使用 tweet 命令:

xscraper tweet https://x.com/nasa/status/1846987139428634858 --format json

输出格式与命令选项

  • --limit <n> 设置项目的最大数量。默认值为 50,硬上限为 200。
  • --format 选择 json、jsonl、csv 或 md。对于 LLM 工作流,Markdown 是实用的选择。
  • -o <file> 将输出写入文件,而不是标准输出。
  • --headed 保持浏览器可见,以便你查看进程并排查问题。

JSON 记录可以包含帖子 ID、URL、创建时间、文本、语言、作者详情、互动指标、主题标签、媒体和抓取时间戳:

{
  "id": "1846987139428634858",
  "url": "https://x.com/nasa/status/1846987139428634858",
  "created_at": "Wed Oct 16 12:34:56 +0000 2026",
  "text": "Liftoff! …",
  "lang": "en",
  "author": { "username": "nasa", "name": "NASA", "verified": true },
  "metrics": { "replies": 1200, "reposts": 4800, "likes": 32000, "views": 1500000 },
  "hashtags": ["EuropaClipper"],
  "scraped_at": "2026-09-26T10:00:00.000Z"
}

将抓取器与 AI 代理结合使用

代码库在 skills/x-scraper-no-api/SKILL.md 中包含一个代理 Skill。你可以将 OpenClaw 或 Hermes 指向 skills/ 目录,也可以将 Skill 清单复制到代理使用的相应 skills 文件夹中。

对于自定义 LLM 脚本,可以将 CLI 作为子进程运行并捕获 Markdown 输出:

import subprocess

ctx = subprocess.run(
    ["xscraper", "search", "local-first software", "--limit", "50", "--format", "md"],
    capture_output=True,
    text=True,
    timeout=600,
).stdout

随附的 Skill 定义了一份安全规范:仅使用公开数据,保持较小的限制,绝不处理凭据,并将抓取内容视为不可信输入。

可靠运行的高级技巧

保持限制范围集中

每次运行最多处理 200 个项目,这是设计使然。对于研究和智能体上下文,使用多个限制适中的专注搜索,优于一次大型采集任务。

使用 Markdown 进行提示

当目标是 LLM 提示时,请选择 --format md。该格式旨在节省令牌,可直接从标准输出中捕获,或使用 -o 保存。

排查问题时使用有头模式

需要观察浏览器运行过程时,添加 --headed。查询行为符合预期后,省略该标志,让常规运行以无头模式执行。

有时结果会更少

如果命令返回的项目少于请求数量,可能只是可用时间线或搜索结果已经耗尽。这属于正常情况,并不一定表示发生了错误。

遵守负责任使用限制

该项目有意避免 CAPTCHA 破解、代理轮换、账号池、凭据处理和规避速率限制。请保持运行规模适中,让自动节奏控制和冷却机制正常工作,并遵守 X 的服务条款及适用法律。

项目的工作原理

真实的 Chromium 实例会像人类用户一样加载 X。抓取器被动捕获 X 发送给其自身前端的 GraphQL JSON,然后将这些数据规范化为稳定的输出结构。它不会直接调用 X 的内部端点,也不依赖不断变化的 HTML 类名。

主要源文件分为五个专注领域:

  • src/cli.js 定义基于 Commander 的 CLI。
  • src/session.js 管理持久化的 Playwright 配置文件和手动登录。
  • src/scraper.js 拦截 GraphQL 响应并规范化记录。
  • src/ratelimit.js 处理节奏控制、上限和退避。
  • src/output.js 写入 JSON、JSONL、CSV 和 Markdown。

结语

x-scraper-no-api 提供了一种在本地收集 X 公开数据的方式,无需 API 密钥、逐条推文计费或托管中介。安装 Node.js,手动完成一次身份验证,然后使用 CLI 导出专注搜索、时间线和公开回复,格式适用于文件、脚本或 AI 智能体工作流。请保持审慎使用,并负责任地处理收集的数据。