【数据采集】[特殊字符] Firecrawl 示例页面 —— 技术设计、原理与部署全解(二)
将任意网站转化为 LLM 可用数据的展示型全栈应用。 项目概述Firecrawl 示例页面是一个基于Next.js 16的全栈 Web 应用它复现了 Firecrawl 的核心价值主张将任意网页抓取为干净的 Markdown直接供大语言模型LLM消费。应用本身是一个“展示型 功能型”页面 —— 既有营销落地页的视觉冲击火焰主题、动画、渐变又有可实际操作的在线抓取演示Live Demo。用户输入任意 URL即可获得清洗后的 Markdown、统计数据和原始 HTML。维度选型前端框架Next.js 16App Router React 19样式方案Tailwind CSS 4 shadcn/uinew-york 风格动画库Framer Motion后端运行时Node.jsNext.js Route Handler数据抓取z-ai-web-dev-sdkpage_reader函数数据库Prisma ORM SQLite构建工具Bun反向代理Caddy部署模式Standalone 产物 进程编排 系统架构应用采用经典的“单页前端 API 后端 进程编排”三层结构。前端通过 HTTP 调用后端 API后端借助z-aiSDK 获取目标网页并转换为 Markdown部署层由 Caddy 统一入口将请求分发到 Next.js 服务和可选的 mini-services。HTTP / fetch带 ?XTransformPortN 的请求其余请求/api/scrape调用无头浏览器抓取htmlToMarkdownPrisma浏览器用户Caddy 反向代理 :81Mini-Services 子服务 :NNext.js Standalone :3000Route Handlerz-ai-web-dev-sdkpage_reader目标网页 HTML清洗后 MarkdownSQLite请求流转以 Live Demo 为例当用户在LiveDemo中输入 URL 并点击Scrape时数据流经以下路径前端发起POST /api/scrape请求体{ url: string }。Caddy将请求转发到 Next.js 的3000端口。Route Handler校验 URL 合法性调用ZAI.create()初始化 SDK。SDK 的page_reader函数无头抓取目标页面返回标题、HTML、发布时间等元数据。htmlToMarkdown()将原始 HTML 清洗并转换为Markdown。后端组装响应markdown、stats、fetchedAt返回 JSON。前端在Markdown / Stats / Raw三个标签页中展示结果。⚙️ 核心原理解析 网页抓取链路抓取链路的灵魂是z-ai-web-dev-sdk提供的page_reader函数。它封装了无头浏览器渲染 内容提取的完整流程constzaiawaitZAI.create();constresultawaitzai.functions.invoke(page_reader,{url});page_reader的工作分为三个阶段页面渲染—— 启动无头 Chrome导航到目标 URL等待页面加载完成。这保证了 JavaScript 渲染的 SPA、动态加载内容都能被正确捕获。内容提取—— 从渲染后的 DOM 中提取标题、最终 URL经重定向、完整 HTML 和发布时间检查多种 meta 标签。用量统计—— 返回usage.tokens记录本次抓取消耗的 token 数用于计费和监控。拿到原始 HTML 后后端调用自定义的htmlToMarkdown()进行清洗和格式转换 —— 这是整个应用的“价值放大器”。 HTML 转 Markdown 算法htmlToMarkdown()位于src/lib/html-to-markdown.ts用纯正则 递归下降实现了一个轻量级转换器不依赖第三方库约 150 行代码。处理管线原始 HTML剥离噪声标签script/style/nav/footer/注释提取 main/article聚焦主内容区块级元素转换标题/代码块/引用/列表/表格行内元素转换链接/图片/加粗/斜体/代码清理残余标签 压缩空行干净 Markdown关键设计亮点噪声剥离优先移除script、style、nav、footer、header、svg等非内容标签避免污染统计和 token 消耗。递归下降对div、section、article等容器递归处理能应对任意深度的嵌套。行内与块级分离inlineToMarkdown()专注处理链接、图片、加粗、斜体、代码等在块级转换中被反复调用职责单一。HTML 实体解码支持nbsp;、amp;、#39;等命名、数字和十六进制实体确保输出无转义残留。表格支持能将简单 HTML 表格转换为 Markdown 管道表格格式。取舍说明正则方案比 DOM 解析更快且零依赖但无法处理畸形 HTML。对于结构良好的网页博客、文档站、新闻页输出质量足以支撑 LLM 消费。 部署架构原理 Standalone 构建模式next.config.ts中声明output: standalone这是 Next.js 的生产部署优化模式。构建时会将所有必需的node_modules依赖追踪并打包进.next/standalone/目录产出一个自包含的server.js可直接用bun server.js或node server.js运行无需在部署环境安装依赖。构建脚本build.sh包含“自愈”机制如果构建后server.js不存在例如误删配置会自动注入配置并重新构建。完整构建收集流程bun installbun run buildnext build生成 .next/standalone/server.js生成 .next/static/复制 public/复制到 next-service-dist/database-runtime-build.sh初始化数据库python-runtime-build.sh固化 Python 依赖mini-services-build.sh编译子服务tar -czf 打包 Caddy 反向代理Caddyfile配置了基于查询参数的智能路由:81 { transform_port_query { query XTransformPort* } handle transform_port_query { reverse_proxy localhost:{query.XTransformPort} } handle { reverse_proxy localhost:3000 } }这个设计使得所有子服务mini-services都可通过同一个81端口访问 —— 前端只需在 URL 中附加?XTransformPort3003Caddy 自动将请求路由到对应端口解决了端口暴露和跨域问题。️ 数据库运行时处理database-runtime-build.sh在构建阶段处理数据库若 Preview 环境已有db/custom.db则复制否则初始化空数据库并对构建产物中的数据库执行prisma db push同步 schema。start.sh运行时检查数据库文件是否存在默认路径/app/db/custom.db若缺失则直接终止启动避免连接到空数据库。也可通过DATABASE_URL环境变量指定外部数据库。 Python 运行时支持python-runtime-build.sh处理可选的 Python 依赖检测项目中是否存在.py源文件、requirements.txt或pyproject.toml。用uv将生产依赖安装到构建产物的python-runtime/site-packages/。修复 console scripts 的 shebang使运行时能正确解析。复制源码到部署产物保持相对路径。start.sh运行时检测到该目录后会将其加入PYTHONPATH和PATH使 Next.js 及其子进程能直接使用打包的 Python 环境。 Firecrawl API 使用指南Firecrawl 提供了一整套将网页转化为 LLM 就绪数据的 API包括搜索、抓取、交互等核心能力。以下为快速上手示例。 无密钥快速开始无需 API Key 即可体验基础功能有速率限制。需要更高限制时可在 Firecrawl App 获取 Key 并添加请求头Authorization: Bearer $FIRECRAWL_API_KEY。 1. 搜索Search搜索网络并返回结果页面的完整内容。# cURLcurl-s-XPOSThttps://api.firecrawl.dev/v2/search\-HContent-Type: application/json\-d{query: firecrawl, limit: 3}# Python SDKfromfirecrawlimportFirecrawl firecrawlFirecrawl()# 无需 API Keyresultsfirecrawl.search(firecrawl,limit3)print(results)// Node.js SDKimport{Firecrawl}fromfirecrawl;constfirecrawlnewFirecrawl();constresultsawaitfirecrawl.search(firecrawl,{limit:3});console.log(results); 2. 抓取Scrape抓取任意 URL获得 Markdown、HTML 或结构化 JSON。curl-s-XPOSThttps://api.firecrawl.dev/v2/scrape\-HContent-Type: application/json\-d{url: https://firecrawl.dev, formats: [markdown, html]}返回示例节选{success:true,data:{markdown:# Home - Firecrawl\n\n...,html:!DOCTYPE html...,metadata:{title:Home - Firecrawl,description:...}}}️ 3. 交互Interact抓取页面后可以继续与之交互点击按钮、填写表单、提取动态内容等。# 1. 抓取 Amazon 首页resultapp.scrape(https://www.amazon.com,formats[markdown])scrape_idresult.metadata.scrape_id# 2. 搜索产品并获取价格app.interact(scrape_id,promptSearch for iPhone 16 Pro Max)responseapp.interact(scrape_id,promptClick on the first result and tell me the price)print(response.output)# 3. 停止会话app.stop_interaction(scrape_id) 更多能力功能说明Map发现网站上的所有 URLCrawl递归抓取整个网站Parse将本地 PDF、DOCX、XLSX、HTML 等转换为 Markdown 或 JSONBrowser Sandbox托管浏览器会话适用于交互式工作流Webhooks异步事件通知️ 安装与部署示例项目环境要求依赖版本要求用途Bun 1.0包管理 构建 运行时Node.js 20Next.js 运行时基础Caddy 2生产环境反向代理uv可选 0.4Python 依赖管理如有 Python 源码本地开发# 1. 安装依赖buninstall# 2. 初始化数据库bun run db:push# 3. 启动开发服务器bun run dev访问http://localhost:3000支持热重载。也可使用一键脚本sh.zscripts/dev.sh生产构建# 构建 Next.js 应用bun run build# 使用完整构建脚本含子服务、Python 等BUILD_ID唯一标识sh.zscripts/build.sh构建产物为/tmp/build_fullstack_${BUILD_ID}.tar.gz。部署启动将构建产物解压到部署目录后执行shstart.sh启动顺序检测并配置 Python 运行时如有启动 Next.js Standalone 服务bun server.js后台运行校验数据库文件存在性启动 mini-services如有后台运行前台启动 Caddy主进程监听81端口验证部署# 健康检查curlhttp://localhost:81/# API 自描述curlhttp://localhost:81/api/scrape# 抓取测试curl-XPOST http://localhost:81/api/scrape\-HContent-Type: application/json\-d{url: https://example.com}成功响应应包含success: true、markdown字段和统计数据。 数据模型Prisma SQLite项目预设了User和Post模型一对多关系虽然当前抓取功能不直接使用但为后续扩展如保存抓取历史、用户管理奠定基础。model User { id String id default(cuid()) email String unique name String? createdAt DateTime default(now()) updatedAt DateTime updatedAt } model Post { id String id default(cuid()) title String content String? published Boolean default(false) authorId String createdAt DateTime default(now()) updatedAt DateTime updatedAt }数据库连接采用单例模式避免 Next.js 热重载时反复创建 PrismaClient 实例。 目录结构速览firecrawl/ ├── src/ │ ├── app/ │ │ ├── api/ │ │ │ ├── route.ts # 健康检查 │ │ │ └── scrape/route.ts # 核心抓取 API │ │ ├── globals.css # 火焰主题 │ │ ├── layout.tsx # 根布局 SEO │ │ └── page.tsx # 首页组装所有区块 │ ├── components/ │ │ ├── firecrawl/ # 8 个业务组件 │ │ └── ui/ # shadcn/ui 40 基础组件 │ ├── hooks/ # use-mobile, use-toast │ └── lib/ │ ├── db.ts # Prisma 单例 │ ├── html-to-markdown.ts # 转换器 │ └── utils.ts # 类名工具 ├── prisma/ │ └── schema.prisma ├── examples/websocket/ # WebSocket 聊天示例 ├── mini-services/ # 子服务目录 ├── .zscripts/ # 构建与部署脚本 ├── Caddyfile # 反向代理配置 ├── next.config.ts └── package.json 火焰主题设计系统项目使用一套鲜明的视觉语言定义在globals.css中类名作用实现.fire-gradient-text橙红渐变文字linear-gradientbackground-clip: text.fire-gradient-bg橙红渐变背景linear-gradient(135deg, #fb923c, #f97316, #ef4444).fire-glow大范围火焰光晕双层box-shadow橙色 红色.fire-grid透视网格背景双向渐变 径向mask-image渐隐.fire-radial径向火焰光双椭圆radial-gradient叠加动画flame-flicker2.6s 呼吸循环和float-up粒子向上飘升加载骨架屏使用shimmer橙色高光扫过。 总结Firecrawl不仅是一个功能完整的网页抓取工具更是一个技术演示的范本前端展示与交互设计精良采用现代 React 生态后端抓取链路清晰自定义转换算法轻量高效部署架构兼顾生产环境需求通过 Caddy Standalone 模式实现一体化交付丰富的 API 能力搜索、抓取、交互使其成为 LLM 应用的数据源利器。无论是想快速搭建自己的“网页转 Markdown”服务还是学习项目的架构与部署这个项目都值得深入研究和借鉴。

相关新闻

构建可审计的LLM社会模拟器:从推理调节到系统验证

构建可审计的LLM社会模拟器:从推理调节到系统验证

这类项目标题看起来学术味很浓,但核心要解决的问题其实很实际:如何用大语言模型(LLM)来模拟社会行为,并且用一种“有道理”的方式去检验这些模拟结果是否靠谱。简单说,它不是为了生成一个会聊天的AI&#x…

2026/8/14 3:14:41 阅读更多 →
电路仿真软件怎么选?3 步装好 CircuitJS1 离线版,免费获得随身电子实验室

电路仿真软件怎么选?3 步装好 CircuitJS1 离线版,免费获得随身电子实验室

电路仿真软件怎么选?3 步装好 CircuitJS1 离线版,免费获得随身电子实验室 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator with small modifications based on modified NW.js. 项目地址: https://gitcode.com/gh…

2026/8/14 3:14:41 阅读更多 →
电视节目资料数字化处理全流程:从采集到归档的完整技术指南

电视节目资料数字化处理全流程:从采集到归档的完整技术指南

最近在整理历史影像资料时,发现很多朋友对早期电视节目的包装素材,尤其是像CCTV-13新闻频道《360度》这类经典栏目的片头片尾有研究和收藏的需求。这类资料不仅是媒体从业者的宝贵参考,也承载着一代观众的集体记忆。本文将围绕如何系统性地理…

2026/8/14 3:14:41 阅读更多 →

最新新闻

VTJ.PRO多端运行时架构解析:一次开发,Web、H5、UniApp多端部署实践

VTJ.PRO多端运行时架构解析:一次开发,Web、H5、UniApp多端部署实践

1. 从“一次开发”到“多端运行”:VTJ.PRO的运行时架构解析在应用开发领域,“一次开发,多端部署”早已不是新概念,但真正能将其落地,并且让开发者用得顺手、用得放心的平台却不多。很多平台要么是“伪多端”&#xff0…

2026/8/14 9:10:15 阅读更多 →
UMI企业智脑4.0与5.0的先进性之争,从“AI工具”到“孪生数字人”,赋能每个员工

UMI企业智脑4.0与5.0的先进性之争,从“AI工具”到“孪生数字人”,赋能每个员工

在CSDN的技术社区里,我们讨论过无数次“企业AI的核心价值”——是用工具提升组织效率,还是用AI释放个体创造力?这个问题,在优秘智能UMI企业智脑的4.0与5.0版本对比中,找到了最现实的答案。作为长期跟踪企业AI落地的技术…

2026/8/14 9:10:15 阅读更多 →
RQShineLabel完全解析:从基础用法到高级动画控制

RQShineLabel完全解析:从基础用法到高级动画控制

RQShineLabel完全解析:从基础用法到高级动画控制 【免费下载链接】RQShineLabel Secret app like text animation 项目地址: https://gitcode.com/gh_mirrors/rq/RQShineLabel RQShineLabel是一款功能强大的iOS文本动画框架,能够为你的应用带来惊…

2026/8/14 9:10:15 阅读更多 →
Fixer双模式实战教程:离线3D重建优化与在线实时 artifact 移除技巧

Fixer双模式实战教程:离线3D重建优化与在线实时 artifact 移除技巧

Fixer双模式实战教程:离线3D重建优化与在线实时 artifact 移除技巧 【免费下载链接】Fixer 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Fixer Fixer是NVIDIA开发的单步图像扩散模型,专为提升3D重建质量而设计,能够有效优化…

2026/8/14 9:10:15 阅读更多 →
Spring Boot核心原理与生产实践:从自动配置到云原生部署

Spring Boot核心原理与生产实践:从自动配置到云原生部署

1. 从“Hello World”到生产级应用:Spring Boot的完整图景 如果你是一名Java开发者,或者正准备踏入这个领域,那么“Spring Boot”这个名字你一定不陌生。它几乎成了现代Java后端开发的代名词。但很多时候,我们接触Spring Boot&am…

2026/8/14 9:10:15 阅读更多 →
PHP反序列化漏洞实战:从Pikachu靶场到WebShell利用

PHP反序列化漏洞实战:从Pikachu靶场到WebShell利用

1. 项目缘起:从靶场到实战的必经之路在网络安全的学习和实战演练中,我们经常听到“靶场”这个词。它就像一个虚拟的射击训练场,里面预设了各种类型的“靶子”——也就是安全漏洞,供我们安全从业者或学习者进行无风险的攻击和防御练…

2026/8/14 9:09:15 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →