闲社
标题:
【教程】手把手教你用Firecrawl API实现网页智能抓取:从入门到自动化数据管道
[打印本页]
作者:
大海全是水
时间:
3 天前
标题:
【教程】手把手教你用Firecrawl API实现网页智能抓取:从入门到自动化数据管道
前言
在AI时代,数据就是燃料。但网页抓取一直是开发者的痛点——反爬机制、动态渲染、数据清洗……今天给大家介绍一个GitHub上13.7万星的热门开源项目
Firecrawl
,它提供了优雅的API方案,让你用几行代码就能实现大规模网页抓取。本教程手把手教你从注册到实战,搭建一个自动化数据管道。
一、前置条件
一个Firecrawl账号(免费额度每月500次抓取)
Python 3.8+ 或 Node.js 环境
基础HTTP/JSON知识
一个目标网站(本教程以技术博客为例)
二、步骤1:获取API密钥
访问
firecrawl.dev
注册账号,进入Dashboard → API Keys,复制你的密钥。
# 环境变量配置(推荐)
export FIRECRAWL_API_KEY="fc-your-api-key-here"
复制代码
三、步骤2:安装SDK
# Python用户
pip install firecrawl-py
# Node.js用户
npm install @mendable/firecrawl-js
复制代码
四、步骤3:基础抓取实战
以下Python代码演示如何抓取单个网页并提取结构化数据:
from firecrawl import FirecrawlApp
import os
# 初始化
app = FirecrawlApp(api_key=os.getenv("FIRECRAWL_API_KEY"))
# 抓取目标网页
result = app.scrape_url(
url="https://example.com/blog/ai-tutorial",
params={
"formats": ["markdown", "html"],
"only_main_content": True, # 过滤导航栏等噪音
"include_tags": ["article", "main"],
"exclude_tags": ["nav", "footer", "sidebar"]
}
)
# 输出结果
print(f"标题: {result['metadata']['title']}")
print(f"正文长度: {len(result['markdown'])} 字符")
print(f"链接数: {len(result['links'])}")
复制代码
五、步骤4:批量抓取与数据清洗
实际项目中往往需要批量处理。Firecrawl支持批量URL抓取和智能去重:
# 批量抓取多个URL
urls = [
"https://site.com/article/1",
"https://site.com/article/2",
"https://site.com/article/3"
]
# 使用爬虫模式(自动发现同域链接)
crawl_result = app.crawl_url(
url="https://site.com/blog",
params={
"limit": 50, # 最多抓取50页
"scrapeOptions": {
"formats": ["markdown"],
"only_main_content": True
},
"allowExternalLinks": False, # 不爬外部链接
"includePaths": ["/blog/"], # 只爬/blog/路径
"excludePaths": ["/blog/tag/", "/blog/author/"] # 排除标签和作者页
},
wait_until_done=True
)
# 保存到本地JSON
import json
with open("crawled_data.json", "w", encoding="utf-8") as f:
json.dump(crawl_result, f, ensure_ascii=False, indent=2)
复制代码
六、步骤5:与LLM结合构建知识库
抓取的数据可以直接喂给大模型做RAG(检索增强生成):
from openai import OpenAI
import json
# 加载抓取的数据
with open("crawled_data.json", "r") as f:
data = json.load(f)
# 提取所有markdown内容
documents = [page["markdown"] for page in data["data"]]
# 分块处理(简单示例)
chunks = []
for doc in documents:
# 按段落分割
paragraphs = doc.split("\n\n")
chunks.extend([p for p in paragraphs if len(p) > 100])
print(f"共生成 {len(chunks)} 个文本块,准备构建向量数据库...")
# 后续可接入Pinecone/Milvus等向量数据库
复制代码
七、步骤6:定时自动化(可选进阶)
用Linux cron实现每日自动抓取:
# 编辑crontab
crontab -e
# 每天凌晨2点执行抓取脚本
0 2 * * * cd /path/to/project && python crawl_and_index.py >> /var/log/crawl.log 2>&1
复制代码
八、常见问题
Q: 免费额度不够用怎么办?
A: 免费版每月500次。可注册多个账号轮换使用,或升级到付费版($19/月起,5000次/月)。
Q: 遇到反爬强的网站怎么办?
A: Firecrawl内置了代理轮换和浏览器模拟。如需更强反爬,可配合Scrapy+Playwright。
Q: 抓取速度太慢?
A: 使用批量抓取API而非单URL循环,并合理设置并发数。付费版支持更高并发。
Q: 数据格式不统一?
A: 建议抓取后统一用markdown格式,再用正则或BeautifulSoup做二次清洗。
九、总结
Firecrawl让网页抓取从"体力活"变成了"配置活"。核心流程就三步:
配置API密钥和抓取参数
调用scrape_url或crawl_url获取数据
清洗数据并接入你的AI pipeline
相比传统爬虫(Scrapy/BeautifulSoup),Firecrawl省去了处理JS渲染、反爬、数据提取的繁琐工作。对于需要快速搭建数据管道的AI项目,它是不二之选。
扩展阅读:
Firecrawl官方文档:
docs.firecrawl.dev
GitHub仓库:
github.com/firecrawl/firecrawl
本教程代码已整理到Gist,回复可见下载链接
有问题欢迎在楼下交流!
欢迎光临 闲社 (https://www.xianshe.com/)
Powered by Discuz! X5.0