闲社

标题: 【教程】手把手教你用Firecrawl API实现网页智能抓取:从入门到自动化数据管道 [打印本页]

作者: 大海全是水    时间: 3 天前
标题: 【教程】手把手教你用Firecrawl API实现网页智能抓取:从入门到自动化数据管道
前言

在AI时代,数据就是燃料。但网页抓取一直是开发者的痛点——反爬机制、动态渲染、数据清洗……今天给大家介绍一个GitHub上13.7万星的热门开源项目 Firecrawl,它提供了优雅的API方案,让你用几行代码就能实现大规模网页抓取。本教程手把手教你从注册到实战,搭建一个自动化数据管道。

一、前置条件



二、步骤1:获取API密钥

访问 firecrawl.dev 注册账号,进入Dashboard → API Keys,复制你的密钥。
  1. # 环境变量配置(推荐)
  2. export FIRECRAWL_API_KEY="fc-your-api-key-here"
复制代码

三、步骤2:安装SDK
  1. # Python用户
  2. pip install firecrawl-py
  3. # Node.js用户
  4. npm install @mendable/firecrawl-js
复制代码

四、步骤3:基础抓取实战

以下Python代码演示如何抓取单个网页并提取结构化数据:
  1. from firecrawl import FirecrawlApp
  2. import os
  3. # 初始化
  4. app = FirecrawlApp(api_key=os.getenv("FIRECRAWL_API_KEY"))
  5. # 抓取目标网页
  6. result = app.scrape_url(
  7.     url="https://example.com/blog/ai-tutorial",
  8.     params={
  9.         "formats": ["markdown", "html"],
  10.         "only_main_content": True,  # 过滤导航栏等噪音
  11.         "include_tags": ["article", "main"],
  12.         "exclude_tags": ["nav", "footer", "sidebar"]
  13.     }
  14. )
  15. # 输出结果
  16. print(f"标题: {result['metadata']['title']}")
  17. print(f"正文长度: {len(result['markdown'])} 字符")
  18. print(f"链接数: {len(result['links'])}")
复制代码

五、步骤4:批量抓取与数据清洗

实际项目中往往需要批量处理。Firecrawl支持批量URL抓取和智能去重:
  1. # 批量抓取多个URL
  2. urls = [
  3.     "https://site.com/article/1",
  4.     "https://site.com/article/2",
  5.     "https://site.com/article/3"
  6. ]
  7. # 使用爬虫模式(自动发现同域链接)
  8. crawl_result = app.crawl_url(
  9.     url="https://site.com/blog",
  10.     params={
  11.         "limit": 50,  # 最多抓取50页
  12.         "scrapeOptions": {
  13.             "formats": ["markdown"],
  14.             "only_main_content": True
  15.         },
  16.         "allowExternalLinks": False,  # 不爬外部链接
  17.         "includePaths": ["/blog/"],  # 只爬/blog/路径
  18.         "excludePaths": ["/blog/tag/", "/blog/author/"]  # 排除标签和作者页
  19.     },
  20.     wait_until_done=True
  21. )
  22. # 保存到本地JSON
  23. import json
  24. with open("crawled_data.json", "w", encoding="utf-8") as f:
  25.     json.dump(crawl_result, f, ensure_ascii=False, indent=2)
复制代码

六、步骤5:与LLM结合构建知识库

抓取的数据可以直接喂给大模型做RAG(检索增强生成):
  1. from openai import OpenAI
  2. import json
  3. # 加载抓取的数据
  4. with open("crawled_data.json", "r") as f:
  5.     data = json.load(f)
  6. # 提取所有markdown内容
  7. documents = [page["markdown"] for page in data["data"]]
  8. # 分块处理(简单示例)
  9. chunks = []
  10. for doc in documents:
  11.     # 按段落分割
  12.     paragraphs = doc.split("\n\n")
  13.     chunks.extend([p for p in paragraphs if len(p) > 100])
  14. print(f"共生成 {len(chunks)} 个文本块,准备构建向量数据库...")
  15. # 后续可接入Pinecone/Milvus等向量数据库
复制代码

七、步骤6:定时自动化(可选进阶)

用Linux cron实现每日自动抓取:
  1. # 编辑crontab
  2. crontab -e
  3. # 每天凌晨2点执行抓取脚本
  4. 0 2 * * * cd /path/to/project && python crawl_and_index.py >> /var/log/crawl.log 2>&1
复制代码

八、常见问题



九、总结

Firecrawl让网页抓取从"体力活"变成了"配置活"。核心流程就三步:



相比传统爬虫(Scrapy/BeautifulSoup),Firecrawl省去了处理JS渲染、反爬、数据提取的繁琐工作。对于需要快速搭建数据管道的AI项目,它是不二之选。

扩展阅读:


有问题欢迎在楼下交流!




欢迎光临 闲社 (https://www.xianshe.com/) Powered by Discuz! X5.0