

# 如何按关键词和日期搜索 X 帖子

你可以在专用搜索采集器中使用原生的开始和结束时间输入，采集指定日期范围内的公开 X 帖子。Actor 是托管运行的数据采集程序。Task 是已保存的输入预设。Actor 负责采集来源数据行，你负责分析数据。

X Search 公开构建版本 0.1.30 接受 queries（1 至 20 条）、searchMode（latest、top、photos、videos）、maxItemsPerQuery（1 至 1000），以及可选的 startTime 和 endTime 日期字符串。首次进行限定范围的核查时，将已保存的整个双查询列表替换为你要使用的 1 条查询及其日期范围，并设置 maxItemsPerQuery 为 2、searchMode 为 latest。使用 1 组原生 startTime 和 endTime，不要在查询中重复添加内联 since 或 until 筛选条件，也不要添加凭空假定存在的 expansion、includeReplies 或 page 输入。

当前对照测试的输入使用 from:OpenAI，startTime 为 2026-07-07，endTime 为 2026-07-09，由此生成的实际执行查询为 from:OpenAI since:2026-07-07 until:2026-07-10。结果位置 2 和 3 的 2 条 7月9日回复数据行具有正确的作者 ID 和 UTC createdAt 值，同时还有 1 条通过 outsideTimeRange 汇总计数记录的排除项，但没有提供被排除的 ID。这证实了所核查的工作流程，并不能证明所有运算符都有效，也不能证明历史数据覆盖完整。

该工具使用的原生字段包括 inputQuery、executedQuery、searchMode、resultPosition、postId、postUrl、text、createdAt、authorId、authorHandle、authorUrl、isReply、isQuote、isRepost 和 observedAt。输出中的 searchMode 使用首字母大写的 Latest，而输入枚举值使用小写形式；数据集数据行中没有状态字段。

## 限定日期范围搜索的操作步骤

1. 运行任何脚本前，先写下你要搜索的短语和日期范围。初步核查时，将 maxItemsPerQuery 设为较低值，并将 searchMode 设为 latest。
2. 替换示例查询列表，只保留一个查询字符串，将最大条目数设为两条，并使用原生 startTime 和 endTime 字符串。不要在查询字符串中重复添加内联 since 或 until 条件。
3. 同时保存 inputQuery 和 executedQuery 字符串。例如，结束日期为 7月9日的请求会生成不包含边界时刻的 7月10日上界，如 until:2026-07-10。
4. 解析原生 createdAt 时间戳，并对照明确说明的 UTC 时间区间进行核查。屏幕上仅显示日期的标签不会自动代表本地时区，除非你进行了转换。
5. 缺少时间戳时，应保留“待确定”标记，不要猜测。createdAt 字段为空时，不能用 observedAt 代替它进行排序，因为 observedAt 只记录采集时间。
6. 核查作者 ID、账号名以及回复、引用或转帖等帖子类型。某位作者发布的帖子仍可能是回复，而不是独立的原创帖子。
7. 检查 OUTPUT 中的顶层字段，如 searchesQueued、searchesStarted、rowsSaved、outsideTimeRange、statusCounts 和 stopReason，同时检查包含 inputQuery、executedQuery、status、rowsSaved、outsideTimeRange 和 stopReason 的 queries 数组。顶层的 queries_exhausted 表示排队查询的处理已结束，并不表示已获取来源中所有匹配的帖子；单条查询的 max_items_per_query 则表示样本已达到该查询的条目数上限。失败、结果为空和达到上限的结果必须分开记录，而且必须保留来源结果位置中的空缺，不能对已采集的数据行重新排名。
8. 交付按日期记录的数据台账，并附上输入凭据和排除数量。不要假定小样本能代表整个平台的出现频率或历史热度。

## 原创虚构的 UTC 边界核查示例

下表是一组原创虚构测试数据，用于检验 10月1日至10月4日这一区间的 UTC 日期边界。UTC 是协调世界时，半开区间包含起始时刻，但不包含上界时刻。根据已核查的仅日期输入约定，请求包含 10月1日至3日的日期范围，对应的起点为 UTC 10月1日 00:00，上界为 UTC 10月4日 00:00，且不包含该上界时刻。原生请求中的 endTime 为 10月3日，而生成的 until 为 10月4日，两者仍须分别记录。这是一组供读者核查的测试数据，并非 Actor 对照测试中的实时数据。

| 帖子 ID | 创建时间（UTC） | 观测时间 | 是否在日期范围内 |
| --- | --- | --- | --- |
| CandidateP1 | 2026-10-01 00:00:00 | 2026-10-01 01:00:00 | 范围内 |
| CandidateP2 | 2026-10-03 23:59:59 | 2026-10-04 00:00:00 | 范围内 |
| CandidateP3 | 2026-10-04 00:00:00 | 2026-10-04 01:00:00 | 范围外 |
| CandidateP4 | null | 2026-10-03 12:00:00 | 待确定 |

这组测试数据展示了 2 条范围内的数据行、1 条范围外的数据行，以及 1 条因创建日期为 null 而无法确定的数据行。采集到的样本可能遗漏较早的帖子，因此，缺少某条帖子只表示未在样本中看到它，并不表示 X 上不存在这条帖子。

## 下一步操作

在扩大日期样本范围前，先对照已保存的实际执行查询，核查 1 个返回的 createdAt 时间戳，并记录它属于范围内、范围外还是无法确定。要运行搜索，请使用 [X Search Scraper Actor](https://apify.com/chronometrica/x-search-scraper) 和 [X and Twitter Search API Dataset Task](https://apify.com/chronometrica/x-search-scraper/examples/x-twitter-search-api-dataset)。

## 来源和延伸阅读

- [Reddit 网页数据采集讨论](https://www.reddit.com/r/webscraping/comments/19bekjv/is_there_a_current_solution_to_scrap_tweets/)