前言
在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项目,它是不二之选。
扩展阅读:
有问题欢迎在楼下交流! |