闲社
标题:
【教程】Firecrawl实战:用一行代码搞定网页数据抓取,告别手写爬虫
[打印本页]
作者:
dcs2000365
时间:
昨天 21:26
标题:
【教程】Firecrawl实战:用一行代码搞定网页数据抓取,告别手写爬虫
前言
做AI项目最头疼的是什么?数据!训练模型需要数据,做RAG需要数据,做分析也需要数据。但网页数据抓取一直是门槛很高的活——要写爬虫、处理反爬、解析HTML、管理请求频率...
今天介绍一个GitHub 13.6万星的开源神器
Firecrawl
,让你用一行代码就能抓取任何网页,还能自动转Markdown、处理动态页面、绕过反爬。
一、Firecrawl是什么?
Firecrawl是一个开源的网页抓取和转换API,核心能力:
抓取任意网页
:静态页面、SPA单页应用、需要登录的页面都能抓
自动转Markdown
:抓取后直接输出结构化Markdown,不用自己解析HTML
智能提取
:支持按Schema提取特定字段(标题、作者、价格等)
批量抓取
:支持sitemap全站抓取、批量URL处理
开源可自建
:数据敏感场景可以本地部署
GitHub地址:
https://github.com/firecrawl/firecrawl
二、前置条件
Python 3.8+ 或 Node.js 16+
一个Firecrawl API Key(官网免费注册:
https://firecrawl.dev
)
安装对应SDK:\npip install firecrawl-py # Python\nnpm install @mendable/firecrawl-js # Node.js
三、实战步骤
步骤1:基础抓取——一行代码搞定
Python版本:
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="your-api-key")
# 抓取单个页面,自动转Markdown
result = app.scrape_url("https://example.com")
print(result["markdown"])
复制代码
Node.js版本:
import FirecrawlApp from "@mendable/firecrawl-js";
const app = new FirecrawlApp({ apiKey: "your-api-key" });
const result = await app.scrapeUrl("https://example.com");
console.log(result.markdown);
复制代码
就这么简单,不需要写xpath、不需要处理编码、不需要管User-Agent。
步骤2:抓取动态页面(SPA/JS渲染)
很多现代网站是React/Vue写的,内容靠JS动态加载。Firecrawl内置了浏览器渲染:
# 抓取SPA页面,等待JS执行完成
result = app.scrape_url(
"https://spa-example.com",
params={
"waitFor": 2000, # 等待2秒让JS渲染
"screenshot": True # 同时截图留存
}
)
复制代码
步骤3:按Schema提取结构化数据
这是最强功能。定义一个JSON Schema,Firecrawl自动从页面提取对应字段:
schema = {
"type": "object",
"properties": {
"title": {"type": "string"},
"author": {"type": "string"},
"publish_date": {"type": "string"},
"content_summary": {"type": "string"},
"tags": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["title", "content_summary"]
}
result = app.scrape_url(
"https://news-site.com/article/123",
params={"extract": {"schema": schema}}
)
# 直接拿到结构化JSON
data = result["extracted_data"]
print(data["title"])
print(data["tags"])
复制代码
做RAG知识库、做竞品监控、做舆情分析,这个能力直接省掉80%的代码量。
步骤4:全站抓取(sitemap模式)
需要抓整个网站?不用自己遍历:
# 抓取全站,自动发现所有页面
result = app.crawl_url(
"https://docs.example.com",
params={
"limit": 100, # 最多抓100页
"scrapeOptions": {"formats": ["markdown"]}
},
wait_until_done=True
)
# 拿到所有页面的Markdown
for page in result["data"]:
print(f"URL: {page['url']}")
print(f"内容: {page['markdown'][:500]}...")
print("---")
复制代码
步骤5:批量URL处理
有几百个URL要抓?用批量接口:
urls = [
"https://site1.com/page1",
"https://site2.com/page2",
"https://site3.com/page3"
]
result = app.batch_scrape_urls(urls, {"formats": ["markdown"]})
复制代码
四、常见问题
Q1:免费额度够用吗?
A:免费版每月500 credits,轻度使用完全够。抓取一个页面约1 credit,批量抓取有优惠。
Q2:数据敏感不想用云服务?
A:Firecrawl完全开源,可以
https://github.com/firecrawl/firecrawl
拉代码本地部署,Docker一键启动。
Q3:遇到反爬怎么办?
A:Firecrawl内置了代理轮换、请求头随机化、速率控制。如果还是被拦,可以配置自己的代理池。
Q4:抓取结果不准确?
A:试试调整waitFor参数(等久一点让JS渲染),或者开启screenshot对比确认页面内容。
Q5:和Playwright/Puppeteer比有什么优势?
A:Playwright是浏览器自动化工具,你需要自己写抓取逻辑。Firecrawl是专门的抓取服务,自动处理渲染、解析、格式化,上层封装更完整。
五、实战场景推荐
AI知识库构建
:抓取文档站点,自动转Markdown喂给RAG系统
竞品监控
:定时抓取竞品页面,提取价格/功能变化
舆情分析
:批量抓取新闻/社交媒体,做情感分析
内容聚合
:抓取多个来源,自动生成日报/周报
SEO分析
:抓取搜索结果,分析标题/描述/排名
六、总结
Firecrawl把网页抓取这个脏活累活封装得极其干净,从一行代码的基础抓取,到Schema提取、全站爬取、批量处理,覆盖了90%的数据抓取需求。
如果你还在手写爬虫、处理反爬、解析DOM,试试Firecrawl,把精力放回核心业务逻辑上。
相关资源:
GitHub:
https://github.com/firecrawl/firecrawl
官方文档:
https://docs.firecrawl.dev
Python SDK:
https://pypi.org/project/firecrawl-py/
Node.js SDK:
https://www.npmjs.com/package/@mendable/firecrawl-js
有问题欢迎在楼下交流!
欢迎光临 闲社 (https://fzgmgmantis.xianshe.com/)
Powered by Discuz! X5.0