news 2026/8/28 10:59:44

Firecrawl实战指南:网页抓取、结构化提取到深度研究,一次讲透

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Firecrawl实战指南:网页抓取、结构化提取到深度研究,一次讲透

Firecrawl实战指南:网页抓取、结构化提取到深度研究,一次讲透

【免费下载链接】firecrawlThe context API to search, scrape, and interact with the web at scale. 🔥项目地址: https://gitcode.com/GitHub_Trending/fi/firecrawl

做竞品调研时,你手动复制了 200 个网页,再一条条粘进 LLM 提示词里。Firecrawl 把这条链路压缩成一次 API 调用:网页抓取后直接输出 LLM 友好的 Markdown,再按你定义的 Schema 完成结构化提取。

Firecrawl是什么:把网站变成可调用的数据源

Firecrawl 是一个面向 AI 应用的网页抓取与数据提取 API:把任意 URL 或整个网站转换成干净的 Markdown / JSON,内置渲染、反爬代理、结构化提取和深度研究能力,解决"网页数据怎么稳定地喂给模型"这个核心问题。

快速上手:安装、配置、第一次抓取

  1. 安装:pip install firecrawl-py
  2. 配置:在 Firecrawl 控制台注册后拿到 Key,设export FIRECRAWL_API_KEY=你的key
  3. 调用:三行代码完成第一次抓取

下面这段代码抓取一个页面,只取 Markdown 正文,是后面所有能力的基础:

from firecrawl import FirecrawlApp app = FirecrawlApp(api_key="fc-xxxx") result = app.scrape_url("https://example.com/docs", formats=["markdown"]) print(result["markdown"])

输出示例:

# Getting Started Install with `npm install` ... POST /v2/scrape accepts a URL and returns markdown ...

单页抓取与格式转换:把网页变成干净的 Markdown

语料入库前的清洗,是最典型的 Markdown 转换需求:原文导航、广告、脚注全都会污染 LLM 的上下文。only_main_content=True只保留正文,配合links一次拿全正文和站内链接,直接入队做 RAG。

result = app.scrape_url( "https://example.com/docs/quickstart", formats=["markdown", "links"], only_main_content=True, )

输出示例:

{ "markdown": "# Quickstart\nInstall with npm ...", "links": ["https://example.com/docs/api", "https://example.com/docs/cli"] }

💡 技巧:需要 JS 渲染的页面加wait_for=1500,让动态内容加载完再抓,避免拿到空壳。

拿到单页 Markdown 后,下一个需求通常是"只留下我要的字段"——这就从格式转换进入结构化提取。

结构化提取:用 Pydantic 定义数据模型

竞品监控里,你只关心标题、价格和更新时间,而不是整页正文。用 Pydantic 把字段和描述写清楚,Firecrawl 的extract能力会按 Schema 从页面里抽数据,返回的就是干净 JSON,不用自己正则。完整可运行脚本见examples/hacker_news_scraper/firecrawl_scraper.py

from pydantic import BaseModel, Field, List class NewsItem(BaseModel): title: str = Field(description="新闻标题") upvotes: str = Field(description="点赞数") class NewsData(BaseModel): news_items: List[NewsItem] data = app.scrape_url( "https://news.ycombinator.com/", formats=["extract"], extract={"schema": NewsData.model_json_schema()}, )

输出示例:

{ "extract": { "news_items": [ {"title": "Show HN: ...", "upvotes": "312"}, {"title": "Postgres 17 released", "upvotes": "287"} ] } }

💡 技巧:Field(description=...)里写清取值规则(如"取整数、不带逗号"),提取准确率明显更高。

单页提取解决"已知 URL 取字段",但真实调研里,你连该看哪些页面都还没确定——这就要交给深度研究。

深度研究:多轮探索与实时进度回调

评估"目标城市租房市场行情"时,你不知道该看哪些房源站。deep_research会自己搜索、逐页跟进、交叉分析,on_activity回调把每一步(search / scrape / analyze)实时打出来,过程不再黑盒。示例见examples/deep-research-apartment-finder/apartment_finder.py

result = app.deep_research( query="杭州西湖区两居室租房,预算4000以内", max_depth=3, # 迭代轮数 time_limit=180, # 秒 max_urls=20, # 最多分析的URL数 on_activity=lambda a: print(f"[{a['type']}] {a['message']}"), ) print(result["data"]["finalAnalysis"])

输出示例:

[search] 找到 12 个相关来源 [scrape] 已抓取 /listings/hangzhou-xihu [analyze] 正在汇总价格区间 finalAnalysis: 西湖区两居室均价 3600-4200 元,性价比集中在文新、三墩板块 ...

💡 技巧:max_urls先设 10 试跑一轮,确认来源质量后再放大,避免预算烧在低质页面上。

研究能力回答了"看哪里",但业务要的不是一次性结果,而是持续、自动、带动作的数据流。

自动化与业务集成:批量抓取加阈值告警

价格监控是最直接的落地场景:每 30 分钟抓一批商品页,按 Schema 提取价格,比上一轮跌了就推 Discord。抓取侧用batch_scrape_urls并发处理,业务侧就是一个普通的定时脚本。仓库里examples/blog-articles/amazon-price-tracking/有一套完整的价格跟踪实现。

results = app.batch_scrape_urls(product_urls, formats=["markdown"]) for r in results["data"]: if r["success"]: price = extract_price_from_markdown(r["markdown"]) if price < last_price[r["url"]]: push_discord(r["url"], price)

输出示例:

[OK] /products/b001 price=41.47 (last 43.20) [ALERT] 降价 $1.73 -> 已推送 Discord

💡 技巧:批量任务用poll_interval=2控制轮询频率,长任务配合 webhook 回调,比客户端死等更稳。

常见问题与避坑

Q:遇到 429 限流怎么办?按套餐 QPS 控制并发;批量接口用poll_interval放慢轮询,失败请求指数退避重试即可。

Q:大页面抓取超时怎么解决?timeout单位是毫秒,JS 重的页面设 30000+,或用wait_for只等关键元素出现,比干等更快。

Q:目标站反爬严格怎么办?scrape_url支持proxy="stealth"(或 auto)走隐身代理池,多数 Cloudflare 级防护可过;仍失败就换actions模拟点击、滚动。

Q:费用怎么估算?按抓取页数计费,批量和多格式输出(截图、PDF 解析)单价更高;先用max_urlslimit把规模压到最小再放量。

Q:非 Python 项目能用吗?官方提供 JS、Go、Java、Ruby、PHP、.NET、Rust 等 SDK,API 形态一致,examples/下按语言都有示例。

延伸与搭配

把抓取的 Markdown 切块后写进向量数据库,就是一套现成的 RAG 语料管线;定时任务跑批量抓取加阈值告警,监控类业务直接落地。仓库examples/目录按场景分了 50+ 个示例,克隆后即可对照:git clone https://gitcode.com/GitHub_Trending/fi/firecrawl。能力边界在于你能定义多准的 Schema,下一步值得试的是把extract的字段描述写成业务语言,而不是字段名直译。

【免费下载链接】firecrawlThe context API to search, scrape, and interact with the web at scale. 🔥项目地址: https://gitcode.com/GitHub_Trending/fi/firecrawl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 10:56:02

PyTorch实现UNet视网膜血管分割实战指南

简介&#xff1a;视网膜血管分割是医学图像分析中的基础性像素级任务&#xff0c;其核心在于平衡细节精度与临床可用性。基于U-Net架构的分割方法因其编码-解码对称结构和跳跃连接机制&#xff0c;天然适配血管长程连续、局部高对比的形态特性&#xff1b;PyTorch框架则凭借动态…

作者头像 李华
网站建设 2026/8/28 10:55:47

C语言字符串函数深度解析:从安全使用到高效编程实践

1. 项目概述&#xff1a;为什么C语言字符串函数值得深挖&#xff1f; 在C语言的世界里&#xff0c;字符串处理是每个开发者都绕不开的坎。它不像Python或Java那样&#xff0c;有一个内置的、功能强大的 String 类。C语言的字符串&#xff0c;本质上就是一个以空字符 \0 结尾…

作者头像 李华
网站建设 2026/8/28 10:51:37

Spring Boot 集成 PageHelper 的完整实践(含 AOP 统一分页)

1. 引言 在实际项目中&#xff0c;分页查询是高频需求。PageHelper 作为 MyBatis 的通用分页插件&#xff0c;能零侵入地实现物理分页。本文将介绍两种集成方式&#xff1a; 常规方式&#xff1a;在 Service 层手动调用 PageHelper.startPage()。 进阶方式&#xff1a;通过 A…

作者头像 李华
网站建设 2026/8/28 10:47:42

软件项目参数估算法:从历史数据到精准成本工期预测

1. 项目概述&#xff1a;参数估算法在软件项目管理中的核心定位 在软件项目管理的实战中&#xff0c;最让项目经理头疼的几件事里&#xff0c;成本与工期估算绝对排在前列。多少次&#xff0c;我们拍着胸脯向老板或客户承诺了一个交付日期和预算&#xff0c;结果项目中期就发现…

作者头像 李华
网站建设 2026/8/28 10:47:33

蓝桥杯单片机国赛实战:从模块化设计到系统调试的工程思维

1. 从一份“参考答案”说起&#xff1a;国赛程序题的实战复盘 最近在整理资料时&#xff0c;翻到了第十届蓝桥杯单片机国赛的程序题参考答案。这份资料在不少备赛群里流传&#xff0c;很多同学拿到手的第一反应可能就是“抄作业”——直接复制代码&#xff0c;试图在自己的开发…

作者头像 李华