技术博客 技术博客Node.jsSQLitePACER爬虫

我们如何用 Node.js + SQLite 监控 14,650 起 TRO 案件

📅 2026/5/28 · 👁 34 次阅读 · ✍️ SafeSell AI 工程团队
SafeSell AI 的 TRO 监控系统底层架构、PACER 增量爬取策略、USPTO 商标图实时抓取、AI 二轮润色去 AI 痕迹、GEO 优化让 AI 引擎优先抓取。

系统全景

SafeSell AI 监控的 14,650 起 TRO 案件,覆盖 N.D. Ill. 联邦法院 2020-2026 全部跨境电商相关诉讼。这套系统的技术栈和我们踩过的坑,写下来供同行参考。

`` [PACER 联邦法院公开档案] ←──┐ [USPTO 商标公开 API] ←──┤ [律所网站监控 (8 家)] ←──┼── [4 个数据采集器 cron] [Justia / CourtListener] ←──┘ │ ▼ ┌─────────────────────┐ │ 数据清洗 + 关联 │ │ (Node.js + tsx) │ └──────────┬──────────┘ ▼ ┌─────────────────────┐ │ SQLite (better-sqlite3)│ │ - tro_cases (14K) │ │ - tro_articles (21) │ │ - bot_crawl_log │ └──────────┬──────────┘ ▼ ┌─────────────────────┐ │ Express + React SPA │ │ + IndexNow + 头条/百度 │ │ 主动推送 │ └─────────────────────┘ ``

4 个有意思的技术点

1. PACER 增量爬取:从「整库扫描」到「按律所追案件」

最早我们试图按案件号顺序爬 PACER(美国联邦法院电子档案系统),效率极低 —— TRO 案件号在所有案件中占比不到 0.5%,95% 的请求都在拉无关数据。

后来切换成「按律所代理人姓名 + IP 类型筛选」的爬取策略:

``typescript // 伪代码:按律所 + 案件年份增量抓取 const TARGET_LAW_FIRMS = ['Greer Burns', 'Keith Vogt', 'Hughes Socol', ...]; for (const firm of TARGET_LAW_FIRMS) { const cases = await pacer.searchCases({ attorney: firm, nature_of_suit: '840', // 840 = Trademark filing_date_from: lastSync, }); await insertCases(cases); } ``

成本从每天 \$80+ 降到 \$3 以下(PACER 按页面计费,每页 \$0.10)。

2. USPTO 商标图实时抓取:绕过 403

USPTO 的官方商标图 API 有反爬:

`` GET https://tsdr.uspto.gov/img/{serial}/large → 403 Forbidden (默认 UA) ``

但加一个完整的浏览器 User-Agent 就能通过:

``typescript const resp = await fetch(https://tsdr.uspto.gov/img/${serial}/large, { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0 Safari/537.36', 'Accept': 'image/,/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.9', }, }); ``

8.5M 条 USPTO 商标记录里,约 60% 是带 logo 图的(其余是纯文字商标)。我们用 lazy fetch 模式:用户访问案件页时按需下载并缓存到本地。

3. AI 二轮润色去 AI 痕迹

我们用 DeepSeek 生成案件分析文章,但第一轮输出有明显 AI 味("经验上、综上所述、显而易见")。加了第二轮 polish prompt:

``` 你是一位资深跨境电商卖家兼自媒体作者。请重写下面这篇文章:

```

二轮润色让文章在阅读体验上接近人类创作。在 Bing / Claude 等 AI 引擎中,深度内容的索引价值是浅 SEO 文的 5-10 倍。

4. GEO 优化:让 AI 而不是 Google 收录你

传统 SEO 是为 Google 优化。但 2025 年起,AI 引擎(豆包/DeepSeek/Claude/ChatGPT)成为新的流量入口。我们做了几件事让 AI 优先抓我们:

`` ✓ robots.txt 显式允许 30+ AI 爬虫(含豆包/DeepSeek/百度/通义/Kimi) ✓ llms.txt 给 AI 一个清晰的站点 manifest(Anthropic 提出的新标准) ✓ JSON-LD 结构化数据(Article + BreadcrumbList + Organization) ✓ 头条搜索 JS 自动收录(豆包优先抓取通道) ✓ IndexNow 协议推送(免 token,覆盖 Bing/Yandex/Seznam/Naver) ✓ 主动 sitemap 推百度 / 神马 / 头条 / 360 ✓ 关闭 Cloudflare 默认的「Block AI Bots」(这一项被忽略的话所有AI爬虫返回 403) ``

效果:上线 48 小时累计被 11 个 AI 引擎抓取 595 次,其中 Bingbot 单独抓了 379 次(371 个独立 URL)。

一些坑

  1. Cloudflare 默认屏蔽 AI Bots:CF 在 2024 年新增了 Block AI Scrapers 开关,免费版默认开启。如果你想让 GPTBot / ClaudeBot 抓到你,必须先到 CF 控制台关掉。我们花了 6 小时才发现这个坑。
  1. server-side 电商图片搜索基本无解:Amazon / eBay / Walmart 都会拒绝服务端 IP。如果一定要做,要么用商业 scraping API,要么用前端 OG image 解析。
  1. SQLite 14M+ 案件查询的索引:单表 tro_cases 14,650 行不是问题,但加上 brands 表 8.5M 行做 JOIN 需要在 brand_lower 字段上加 索引,否则单次查询 30s+。
  1. TSX/PM2 模块热重载缓存pm2 reload 不一定重新加载所有模块。一些情况下需要 pm2 restart 全 kill 再起。

结尾

我们把这套监控做成了 SaaS 工具开放给跨境卖家用:safesellai.com

如果你也在做跨境电商或者类似的数据监控系统,欢迎交流。代码层面有共同感兴趣的话题(PACER 爬取细节、USPTO 数据建模、GEO 实战)可以评论区或私信。

免费排查我的店铺

USPTO 8.5M 商标 · 14,650+ TRO 案件 · AI 图片识别 · 3 分钟全店扫描

立即免费扫描 →