玩机系列之:搭建AI基础设置-爬虫神器FireCrawl

玩机365 2025-7-3 7/3

FireCrawl:项目初印象

在 AI 蓬勃发展的时代,数据已然成为驱动创新与发展的核心要素。从训练强大的大语言模型,到实现智能的检索增强生成(RAG),优质的数据都是不可或缺的基石。而获取高质量数据的关键一步,便是高效的网页数据抓取,FireCrawl 这款强大的开源爬虫工具应运而生 ,在众多爬虫工具中脱颖而出。

截至目前,FireCrawl 在 GitHub 上已经收获了超 42k 的 Star,足见其受关注和受欢迎程度。它由 MendableAI 精心打造,致力于将网页内容转化为 Markdown 或其他结构化数据,为后续的数据分析、模型训练等工作提供了极大的便利。

玩机系列之:搭建AI基础设置-爬虫神器FireCrawl

深入剖析 FireCrawl

(一)项目简介

FireCrawl 是一款开源且优秀的尖端 AI 爬虫工具 ,专注于 Web 数据提取,能将网页数据精准地提取出来,并巧妙地转化为 Markdown 格式或者其他结构化数据,满足不同用户对于数据格式的多样化需求。其新上线的 LLM Extract 功能更是一大亮点,借助大语言模型的强大能力,能快速完成网页数据的提取工作,高效产出 LLM-ready 的数据,为大语言模型训练、检索增强生成(RAG)等任务提供了坚实的数据支持。

(二)主要特点

  1. 强大抓取能力:无论是简单的静态页面,还是被 JavaScript 渲染的复杂动态网页,FireCrawl 都能游刃有余地进行内容抓取,凭借先进的反反爬虫技术,如使用代理、自定义头部等,有效绕过网站的反爬虫机制,为用户获取全面的数据。

  2. 智能状态管理:在大规模网页抓取任务中,分页功能让数据获取有条不紊,流式传输则提升了数据传输效率,减少等待时间,而清晰明确的错误提示功能,能帮助开发者快速定位和解决爬取过程中出现的问题,保障数据抓取任务顺利推进。

  3. 多样输出格式:支持将抓取内容转换为 Markdown 格式,方便进行文本编辑、阅读和整理,也支持输出为结构化数据如 JSON ,便于后续进行编程处理和作为机器学习模型的输入数据,在不同应用场景中都能发挥作用。

  4. 增强解析能力:通过优化 Markdown 解析逻辑,去除不必要的冗余信息,FireCrawl 能输出更干净、高质量的文本,为用户节省数据处理的时间和精力,让后续的数据分析、应用更加高效。

  5. 全面 SDK 支持:提供了丰富的 SDK,支持 Go、Rust、Python、Node.js 等多种编程语言,全面兼容 v1 API。开发者可以根据自身的技术栈和项目需求,选择熟悉的语言进行开发,轻松将 FireCrawl 集成到自己的项目中,大大提高开发效率。

  6. 快速链接收集:新增的 /map 端点,可以在几秒钟内快速收集网页中的相关链接,为用户提供网站的链接结构,方便进一步抓取相关内容,对于需要获取大量相关页面数据的场景,这个功能能显著提高工作效率 。

应用场景探索

  • 大模型训练与 RAG 场景:为 LLM 提供结构化训练数据,或通过爬取网页构建向量数据库,支撑 “Chat with Website” 等 RAG 应用开发;​

  • 数据工程场景:替代传统爬虫完成动态网页解析、PDF/Word 等媒体文件提取,直接输出 Markdown/JSON 等 LLM 友好格式;​

  • 业务自动化场景:通过 Actions 功能模拟用户交互(点击、输入、截图),适配电商比价、竞品 SEO 监控、内容合规检测等需求;​

  • 低代码与集成场景:无缝对接 Langchain、Llama Index 等框架及 Dify/Langflow 等低代码平台,降低非技术用户的数据获取门槛。

上手准备

在使用 FireCrawl 前,你需要在其官网上注册并获取 API 密钥 ,密钥分为收费和免费两种,若不在商业项目中使用,通过免费计划即可。获取 API 密钥后,便可以开启你的数据抓取之旅。它为用户提供了多样化的使用方式:

  • 在线体验:在 FireCrawl 官网上可直接在线免费体验,提供了三种模式,Single URL 仅抓取指定的 URL,而不抓取子页面;Crawl 抓取 URL 及其所有可访问的子页面;Map 可在几秒钟内输出所有网站的网址。

  • 使用 API:提供易于使用的 API ,自行托管后台服务还提供了 Python、Node 的 SDK,并且能够与现有一些 AI 工具集成,如 Langchain、Dify、Flowise、Llama Index 等。

  • 本地部署:可以在本地运行,关于具体的部署步骤和要求,大家可以在官网上查看详细的部署指南,由于部署部分涉及较多技术细节和个性化配置,这部分内容就由大家自行探索实践啦,后续我也很期待能和大家交流各自的部署经验和心得 。

本地部署关键文件

# docker-compose.yaml 文件

name: firecrawl

x-common-service: &common-service
  # NOTE: If you don't want to build the service locally,
  # uncomment the build: statement and comment out the image: statement
  # image: ghcr.io/mendableai/firecrawl
  build: apps/api

  ulimits:
    nofile:
      soft: 65535
      hard: 65535
  networks:
    - backend
  extra_hosts:
    - "host.docker.internal:host-gateway"

x-common-env: &common-env
  REDIS_URL: ${REDIS_URL:-redis://redis:6379}
  REDIS_RATE_LIMIT_URL: ${REDIS_URL:-redis://redis:6379}
  PLAYWRIGHT_MICROSERVICE_URL: ${PLAYWRIGHT_MICROSERVICE_URL:-http://playwright-service:3000/scrape}
  USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION}
  OPENAI_API_KEY: ${OPENAI_API_KEY}
  OPENAI_BASE_URL: ${OPENAI_BASE_URL}
  MODEL_NAME: ${MODEL_NAME}
  MODEL_EMBEDDING_NAME: ${MODEL_EMBEDDING_NAME} 
  OLLAMA_BASE_URL: ${OLLAMA_BASE_URL} 
  SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL}
  BULL_AUTH_KEY: ${BULL_AUTH_KEY}
  TEST_API_KEY: ${TEST_API_KEY}
  POSTHOG_API_KEY: ${POSTHOG_API_KEY}
  POSTHOG_HOST: ${POSTHOG_HOST}
  SUPABASE_ANON_TOKEN: ${SUPABASE_ANON_TOKEN}
  SUPABASE_URL: ${SUPABASE_URL}
  SUPABASE_SERVICE_TOKEN: ${SUPABASE_SERVICE_TOKEN}
  SELF_HOSTED_WEBHOOK_URL: ${SELF_HOSTED_WEBHOOK_URL}
  SERPER_API_KEY: ${SERPER_API_KEY}
  SEARCHAPI_API_KEY: ${SEARCHAPI_API_KEY}
  LOGGING_LEVEL: ${LOGGING_LEVEL}
  PROXY_SERVER: ${PROXY_SERVER}
  PROXY_USERNAME: ${PROXY_USERNAME}
  PROXY_PASSWORD: ${PROXY_PASSWORD}
  SEARXNG_ENDPOINT: ${SEARXNG_ENDPOINT}
  SEARXNG_ENGINES: ${SEARXNG_ENGINES}
  SEARXNG_CATEGORIES: ${SEARXNG_CATEGORIES}

services:
  playwright-service:
    # NOTE: If you don't want to build the service locally,
    # uncomment the build: statement and comment out the image: statement
    # image: ghcr.io/mendableai/playwright-service:latest
    build: apps/playwright-service-ts
    environment:
      PORT: 3000
      PROXY_SERVER: ${PROXY_SERVER}
      PROXY_USERNAME: ${PROXY_USERNAME}
      PROXY_PASSWORD: ${PROXY_PASSWORD}
      BLOCK_MEDIA: ${BLOCK_MEDIA}
    networks:
      - backend

  api:
    <<: *common-service
    environment:
      <<: *common-env
      HOST: "0.0.0.0"
      PORT: ${INTERNAL_PORT:-3002}
      FLY_PROCESS_GROUP: app
    depends_on:
      - redis
      - playwright-service
    ports:
      - "${PORT:-3002}:${INTERNAL_PORT:-3002}"
    command: [ "pnpm", "run", "start:production" ]

  worker:
    <<: *common-service
    environment:
      <<: *common-env
      FLY_PROCESS_GROUP: worker
    depends_on:
      - redis
      - playwright-service
      - api
    command: [ "pnpm", "run", "workers" ]

  redis:
    # NOTE: If you want to use Valkey (open source) instead of Redis (source available),
    # uncomment the Valkey statement and comment out the Redis statement.
    # Using Valkey with Firecrawl is untested and not guaranteed to work. Use with caution.
    image: redis:alpine
    # image: valkey/valkey:alpine

    networks:
      - backend
    command: redis-server --bind 0.0.0.0

networks:
  backend:
    driver: bridge
# .env 文件

# ===== Required ENVS ======
NUM_WORKERS_PER_QUEUE=8 
PORT=8080
HOST=0.0.0.0

#for self-hosting using docker, use redis://redis:6379. For running locally, use redis://localhost:6379
REDIS_URL=redis://redis:6379

#for self-hosting using docker, use redis://redis:6379. For running locally, use redis://localhost:6379
REDIS_RATE_LIMIT_URL=redis://redis:6379 
PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/html

## To turn on DB authentication, you need to set up supabase.
USE_DB_AUTHENTICATION=false

# ===== Optional ENVS ======

# Supabase Setup (used to support DB authentication, advanced logging, etc.)
# SUPABASE_ANON_TOKEN= 
# SUPABASE_URL= 
# SUPABASE_SERVICE_TOKEN=

# Other Optionals
# use if you've set up authentication and want to test with a real API key
# TEST_API_KEY=
# set if you'd like to test the scraping rate limit
# RATE_LIMIT_TEST_API_KEY_SCRAPE=
# set if you'd like to test the crawling rate limit
# RATE_LIMIT_TEST_API_KEY_CRAWL=
# add for LLM dependednt features (image alt generation, etc.)
# OPENAI_API_KEY=
# BULL_AUTH_KEY=@
# use if you're configuring basic logging with logtail
# LOGTAIL_KEY=
# set if you have a llamaparse key you'd like to use to parse pdfs
# LLAMAPARSE_API_KEY=
# set if you'd like to send slack server health status messages
# SLACK_WEBHOOK_URL=
# set if you'd like to send posthog events like job logs
# POSTHOG_API_KEY=
# set if you'd like to send posthog events like job logs
# POSTHOG_HOST=

# set if you'd like to use the fire engine closed beta
# FIRE_ENGINE_BETA_URL=

# Proxy Settings for Playwright (Alternative you can can use a proxy service like oxylabs, which rotates IPs for you on every request)
# PROXY_SERVER=
# PROXY_USERNAME=
# PROXY_PASSWORD=
# set if you'd like to block media requests to save proxy bandwidth
# BLOCK_MEDIA=

# Set this to the URL of your webhook when using the self-hosted version of FireCrawl
# SELF_HOSTED_WEBHOOK_URL=

# Resend API Key for transactional emails
# RESEND_API_KEY=

# LOGGING_LEVEL determines the verbosity of logs that the system will output.
# Available levels are:
# NONE - No logs will be output.
# ERROR - For logging error messages that indicate a failure in a specific operation.
# WARN - For logging potentially harmful situations that are not necessarily errors.
# INFO - For logging informational messages that highlight the progress of the application.
# DEBUG - For logging detailed information on the flow through the system, primarily used for debugging.
# TRACE - For logging more detailed information than the DEBUG level.
# Set LOGGING_LEVEL to one of the above options to control logging output.
LOGGING_LEVEL=INFO

总结

FireCrawl 凭借强大的抓取能力、智能的状态管理、多样的输出格式、增强的解析能力、全面的 SDK 支持以及快速链接收集功能,在大语言模型训练、检索增强生成以及各类数据驱动开发项目中发挥着重要作用,是一款极具价值的开源爬虫工具。如果你正在为网页数据抓取和处理而烦恼,不妨试试 FireCrawl,相信它会给你带来惊喜,助力你的项目更上一层楼,期待大家在使用过程中发现更多精彩 。

有啥不懂的欢迎私信交流

- THE END -

资源搜集自互联网,如有侵犯权利,请及时联系我们,我们将尽快处理。
博客仅为分享信息,不介入任何交易纠纷,您在购买和使用中遇到任何问题请联络相关提供商处理。

Come2theweb