4个真实项目拆解Firecrawl:网页抓取、结构化提取到自动研究指南
【免费下载链接】firecrawlThe context API to search, scrape, and interact with the web at scale. 🔥项目地址: https://gitcode.com/GitHub_Trending/fi/firecrawl
Firecrawl 把整站网页转成干净的 Markdown 和结构化数据,解决"爬虫写一半、反爬卡全程"的老问题。这篇指南拆 4 个能直接跑通的项目:电商价格监控、站点内链分析、公司情报收集、AI 租房搜索,每个项目都附核心代码和调优参数,帮你把网页数据接进自己的 AI 应用。
快速上手:5分钟跑通第一次抓取
三步完成初始化:装 SDK、配密钥、发第一次请求。
pip install firecrawl-pyexport FIRECRAWL_API_KEY="fc-你的密钥"from firecrawl import FirecrawlApp app = FirecrawlApp() result = app.scrape_url("https://example.com") print(result.get("markdown", "")[:200])这段代码做了三件事:初始化客户端、抓取目标页面、把返回的 Markdown 打出来看一眼。确认能拿到干净文本后,下面的场景就可以逐个照搬。
场景一:搭建电商价格监控看板 📉
痛点:消费者盯着大促页面手动刷价格,费时还容易错过限时折扣;卖家想知道竞品价格曲线,更是没辙。
思路:整条流水线是"定时抓取 → 入库 → 画图 → 告警"。项目用 Firecrawl 抓商品页拿当前价格,写进 Supabase 的 Postgres 表,Streamlit 画历史曲线,价格跌破阈值就推 Discord 通知,GitHub Actions 按小时调度,全程免费。完整代码在 examples/blog-articles/amazon-price-tracking/。
代码亮点:
result = app.scrape_url( product_url, params={"formats": ["extract"], "extract": {"schema": PriceInfo.model_json_schema()}}, )用 Pydantic 模型PriceInfo声明"我要价格、货币、标题"三个字段,Firecrawl 就只吐这些字段的结构化结果,不用自己正则切 HTML。
延伸:
- 把阈值从固定金额改成百分比跌幅,能过滤掉日常毛刺波动
- 调度频率降到每天两次,足够覆盖多数电商的变价节奏,还省额度
场景二:让博客自动长出内链 🌿
痛点:内容团队发新文章时,经常忘记把旧文章链进来,网站结构越做越散,SEO 权重留不住。
思路:先抓目标博客页拿正文,再用map_url扫出整个站点的全部链接(这一步不逐页抓取,大站也快),最后把"正文 + 站内链接清单"交给 LLM,让它只改链接不动正文,输出改好的 Markdown。源码见 examples/internal_link_assistant/。
代码亮点:
blog_md = app.scrape_url(url, params={"formats": ["markdown"]})["markdown"] links = app.map_url(base_domain).get("links", []) prompt = f"正文:{blog_md}\n站内页面:{links}\n请只插入内链,返回Markdown"抓正文和扫站点是两次独立调用,map_url负责"列清单",scrape_url负责"读内容",分工清楚、成本可控。
延伸:
- 给 LLM 加一条约束:只链向主题词重合度高的页面,避免硬塞广告位
- 把输出的 Markdown 直接接进 CMS 的草稿接口,实现半自动发布
场景三:三步跑通公司情报流水线 🔍
痛点:做尽调或竞品分析时,信息散落在官网、新闻、招聘页里,人工翻网页整理字段,一份报告要花半天。
思路:分三步接力。第一步用 SerpAPI 搜"公司名 + 想了解的信息"拿到候选链接;第二步让 Gemini 2.5 从搜索结果里挑出真正相关的几个 URL,滤掉社交链接和广告位;第三步把选中的 URL 交给 Firecrawl 的 extract 接口,按提示词直接出结构化字段。示例在 examples/gemini-2.5-web-extractor/。
代码亮点:
payload = {"urls": urls, "prompt": f"提取{company}的成立时间、业务线、融资情况", "enableWebSearch": True} resp = requests.post(EXTRACT_URL, headers=headers, json=payload, timeout=30)extract 接口是异步的:提交后拿一个 job id,轮询到完成才取结果,代码里记得加轮询循环而不是读第一次响应。
延伸:
- 搜索源可以换成任意你已有账号的搜索引擎接口,省掉 SerpAPI 费用
- 选 URL 的模型换成更便宜的 Flash 档,挑链接任务不需要大模型
场景四:深度研究版智能租房助手 🏠
痛点:换房用户要在十几个租房站之间横跳比价,条件一多就乱,手动整理信息不现实。
思路:把"找房"交给 Firecrawl 的 deep_research。它接受一句自然语言查询,自动多轮搜索、抓页、分析,参数用maxDepth控制迭代轮数、timeLimit控总时长、maxUrls封顶分析页数;on_activity回调实时打印每轮在干什么,过程完全可见。研究完把源材料喂给 Claude 3.7,强制输出固定 JSON 结构,终端里直接渲染成对比卡片。源码在 examples/deep-research-apartment-finder/。
代码亮点:
params = {"maxDepth": 3, "timeLimit": 180, "maxUrls": 20} results = firecrawl.deep_research( query="杭州滨江两居室,预算4500,带阳台", params=params, on_activity=print_progress, )三个参数就是成本旋钮:maxUrls每加 10 个页面,耗时和费用都明显上升,先用 20 试水再放开。
延伸:
- 把最终 JSON 结果存 SQLite,多租几次就能对比同一小区的价格变化
- 提示词里写死字段名,后续接任何下游系统都不用改解析逻辑
Firecrawl 能力速查表
| 功能 | 典型场景 | 关键调用方式 |
|---|---|---|
| 单页抓取 | 抓正文、转 Markdown | app.scrape_url(url, params={"formats": ["markdown"]}) |
| 结构化提取 | 按字段抽价格、新闻条目 | formats=["extract"]配 Pydantic 模型 schema |
| 整站链接映射 | 内链分析、站点摸底 | app.map_url(domain)只列链接不抓正文 |
| 整站爬虫 | 批量采集多个页面 | app.crawl_url(url),用 limit 控页数 |
| 深度研究 | 多轮搜索+抓取+分析 | deep_research(query, params, on_activity) |
| extract 接口 | 多 URL 批量出结构化字段 | POST 提交 job id,轮询取结果 |
避坑指南
- 限流先看额度:free 档有并发和页面数上限,批量任务被 429 时加退避重试,别裸循环硬刷
- 超时设保守:deep_research 和 extract 都是异步任务,SDK 超时建议给足,研究类任务 180 秒起步
- 反爬页面换思路:登录墙或强反爬站点抓不到正文时,换官方 API 或第三方数据源,别死磕
- 密钥别进仓库:
FIRECRAWL_API_KEY放.env或环境变量,.env加进.gitignore,CI 里用 secret 注入 - 提取 schema 别贪多:一次提取的字段越多、每页越贵,不确定的字段先砍掉再迭代
写在最后
以上 4 个项目覆盖了从单页提取到多轮深度研究的全部链路,代码都能直接克隆运行。更多示例见仓库的 examples/,各语言 SDK 在 apps/ 目录下。
<输出文章> </output article>
Wait, I made an error at the end with the closing tag. Let me provide the corrected version.
<输出文章>
4个真实项目拆解Firecrawl:网页抓取、结构化提取到自动研究指南
Firecrawl 把整站网页转成干净的 Markdown 和结构化数据,解决"爬虫写一半、反爬卡全程"的老问题。这篇指南拆 4 个能直接跑通的项目:电商价格监控、站点内链分析、公司情报收集、AI 租房搜索,每个项目都附核心代码和调优参数,帮你把网页数据接进自己的 AI 应用。
快速上手:5分钟跑通第一次抓取
三步完成初始化:装 SDK、配密钥、发第一次请求。
pip install firecrawl-pyexport FIRECRAWL_API_KEY="fc-你的密钥"from firecrawl import FirecrawlApp app = FirecrawlApp() result = app.scrape_url("https://example.com") print(result.get("markdown", "")[:200])这段代码做了三件事:初始化客户端、抓取目标页面、把返回的 Markdown 打出来看一眼。确认能拿到干净文本后,下面的场景就可以逐个照搬。
场景一:搭建电商价格监控看板 📉
痛点:消费者盯着大促页面手动刷价格,费时还容易错过限时折扣;卖家想知道竞品价格曲线,更是没辙。
思路:整条流水线是"定时抓取 → 入库 → 画图 → 告警"。项目用 Firecrawl 抓商品页拿当前价格,写进 Supabase 的 Postgres 表,Streamlit 画历史曲线,价格跌破阈值就推 Discord 通知,GitHub Actions 按小时调度,全程免费。完整代码在 examples/blog-articles/amazon-price-tracking/。
代码亮点:
result = app.scrape_url( product_url, params={"formats": ["extract"], "extract": {"schema": PriceInfo.model_json_schema()}}, )用 Pydantic 模型PriceInfo声明"我要价格、货币、标题"三个字段,Firecrawl 就只吐这些字段的结构化结果,不用自己正则切 HTML。
延伸:
- 把阈值从固定金额改成百分比跌幅,能过滤掉日常毛刺波动
- 调度频率降到每天两次,足够覆盖多数电商的变价节奏,还省额度
场景二:让博客自动长出内链 🌿
痛点:内容团队发新文章时,经常忘记把旧文章链进来,网站结构越做越散,SEO 权重留不住。
思路:先抓目标博客页拿正文,再用map_url扫出整个站点的全部链接(这一步不逐页抓取,大站也快),最后把"正文 + 站内链接清单"交给 LLM,让它只改链接不动正文,输出改好的 Markdown。源码见 examples/internal_link_assistant/。
代码亮点:
blog_md = app.scrape_url(url, params={"formats": ["markdown"]})["markdown"] links = app.map_url(base_domain).get("links", []) prompt = f"正文:{blog_md}\n站内页面:{links}\n请只插入内链,返回Markdown"抓正文和扫站点是两次独立调用,map_url负责"列清单",scrape_url负责"读内容",分工清楚、成本可控。
延伸:
- 给 LLM 加一条约束:只链向主题词重合度高的页面,避免硬塞广告位
- 把输出的 Markdown 直接接进 CMS 的草稿接口,实现半自动发布
场景三:三步跑通公司情报流水线 🔍
痛点:做尽调或竞品分析时,信息散落在官网、新闻、招聘页里,人工翻网页整理字段,一份报告要花半天。
思路:分三步接力。第一步用 SerpAPI 搜"公司名 + 想了解的信息"拿到候选链接;第二步让 Gemini 2.5 从搜索结果里挑出真正相关的几个 URL,滤掉社交链接和广告位;第三步把选中的 URL 交给 Firecrawl 的 extract 接口,按提示词直接出结构化字段。示例在 examples/gemini-2.5-web-extractor/。
代码亮点:
payload = {"urls": urls, "prompt": f"提取{company}的成立时间、业务线、融资情况", "enableWebSearch": True} resp = requests.post(EXTRACT_URL, headers=headers, json=payload, timeout=30)extract 接口是异步的:提交后拿一个 job id,轮询到完成才取结果,代码里记得加轮询循环而不是读第一次响应。
延伸:
- 搜索源可以换成任意你已有账号的搜索引擎接口,省掉 SerpAPI 费用
- 选 URL 的模型换成更便宜的 Flash 档,挑链接任务不需要大模型
场景四:深度研究版智能租房助手 🏠
痛点:换房用户要在十几个租房站之间横跳比价,条件一多就乱,手动整理信息不现实。
思路:把"找房"交给 Firecrawl 的 deep_research。它接受一句自然语言查询,自动多轮搜索、抓页、分析,参数用maxDepth控制迭代轮数、timeLimit控总时长、maxUrls封顶分析页数;on_activity回调实时打印每轮在干什么,过程完全可见。研究完把源材料喂给 Claude 3.7,强制输出固定 JSON 结构,终端里直接渲染成对比卡片。源码在 examples/deep-research-apartment-finder/。
代码亮点:
params = {"maxDepth": 3, "timeLimit": 180, "maxUrls": 20} results = firecrawl.deep_research( query="杭州滨江两居室,预算4500,带阳台", params=params, on_activity=print_progress, )三个参数就是成本旋钮:maxUrls每加 10 个页面,耗时和费用都明显上升,先用 20 试水再放开。
延伸:
- 把最终 JSON 结果存 SQLite,多租几次就能对比同一小区的价格变化
- 提示词里写死字段名,后续接任何下游系统都不用改解析逻辑
Firecrawl 能力速查表
| 功能 | 典型场景 | 关键调用方式 |
|---|---|---|
| 单页抓取 | 抓正文、转 Markdown | app.scrape_url(url, params={"formats": ["markdown"]}) |
| 结构化提取 | 按字段抽价格、新闻条目 | formats=["extract"]配 Pydantic 模型 schema |
| 整站链接映射 | 内链分析、站点摸底 | app.map_url(domain)只列链接不抓正文 |
| 整站爬虫 | 批量采集多个页面 | app.crawl_url(url),用 limit 控页数 |
| 深度研究 | 多轮搜索+抓取+分析 | deep_research(query, params, on_activity) |
| extract 接口 | 多 URL 批量出结构化字段 | POST 提交 job id,轮询取结果 |
避坑指南
- 限流先看额度:free 档有并发和页面数上限,批量任务被 429 时加退避重试,别裸循环硬刷
- 超时设保守:deep_research 和 extract 都是异步任务,SDK 超时建议给足,研究类任务 180 秒起步
- 反爬页面换思路:登录墙或强反爬站点抓不到正文时,换官方 API 或第三方数据源,别死磕
- 密钥别进仓库:
FIRECRAWL_API_KEY放.env或环境变量,.env加进.gitignore,CI 里用 secret 注入 - 提取 schema 别贪多:一次提取的字段越多、每页越贵,不确定的字段先砍掉再迭代
写在最后
以上 4 个项目覆盖了从单页提取到多轮深度研究的全部链路,代码都能直接克隆运行。更多示例见仓库的 examples/,各语言 SDK 在 apps/ 目录下。
【免费下载链接】firecrawlThe context API to search, scrape, and interact with the web at scale. 🔥项目地址: https://gitcode.com/GitHub_Trending/fi/firecrawl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考