FireCrawl:项目初印象
在 AI 蓬勃发展的时代,数据已然成为驱动创新与发展的核心要素。从训练强大的大语言模型,到实现智能的检索增强生成(RAG),优质的数据都是不可或缺的基石。而获取高质量数据的关键一步,便是高效的网页数据抓取,FireCrawl 这款强大的开源爬虫工具应运而生 ,在众多爬虫工具中脱颖而出。
截至目前,FireCrawl 在 GitHub 上已经收获了超 42k 的 Star,足见其受关注和受欢迎程度。它由 MendableAI 精心打造,致力于将网页内容转化为 Markdown 或其他结构化数据,为后续的数据分析、模型训练等工作提供了极大的便利。
深入剖析 FireCrawl
(一)项目简介
FireCrawl 是一款开源且优秀的尖端 AI 爬虫工具 ,专注于 Web 数据提取,能将网页数据精准地提取出来,并巧妙地转化为 Markdown 格式或者其他结构化数据,满足不同用户对于数据格式的多样化需求。其新上线的 LLM Extract 功能更是一大亮点,借助大语言模型的强大能力,能快速完成网页数据的提取工作,高效产出 LLM-ready 的数据,为大语言模型训练、检索增强生成(RAG)等任务提供了坚实的数据支持。
(二)主要特点
-
强大抓取能力:无论是简单的静态页面,还是被 JavaScript 渲染的复杂动态网页,FireCrawl 都能游刃有余地进行内容抓取,凭借先进的反反爬虫技术,如使用代理、自定义头部等,有效绕过网站的反爬虫机制,为用户获取全面的数据。
-
智能状态管理:在大规模网页抓取任务中,分页功能让数据获取有条不紊,流式传输则提升了数据传输效率,减少等待时间,而清晰明确的错误提示功能,能帮助开发者快速定位和解决爬取过程中出现的问题,保障数据抓取任务顺利推进。
-
多样输出格式:支持将抓取内容转换为 Markdown 格式,方便进行文本编辑、阅读和整理,也支持输出为结构化数据如 JSON ,便于后续进行编程处理和作为机器学习模型的输入数据,在不同应用场景中都能发挥作用。
-
增强解析能力:通过优化 Markdown 解析逻辑,去除不必要的冗余信息,FireCrawl 能输出更干净、高质量的文本,为用户节省数据处理的时间和精力,让后续的数据分析、应用更加高效。
-
全面 SDK 支持:提供了丰富的 SDK,支持 Go、Rust、Python、Node.js 等多种编程语言,全面兼容 v1 API。开发者可以根据自身的技术栈和项目需求,选择熟悉的语言进行开发,轻松将 FireCrawl 集成到自己的项目中,大大提高开发效率。
-
快速链接收集:新增的 /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,相信它会给你带来惊喜,助力你的项目更上一层楼,期待大家在使用过程中发现更多精彩 。
有啥不懂的欢迎私信交流
资源搜集自互联网,如有侵犯权利,请及时联系我们,我们将尽快处理。
博客仅为分享信息,不介入任何交易纠纷,您在购买和使用中遇到任何问题请联络相关提供商处理。
如若转载,请注明出处:https://www.wanji365.com/wanjixiliezhidajianaijichushezhipachongshenqifirecrawl/