5 分鐘上手 Firecrawl

文章目錄

    • Firecrawl 是什么?
    • 本地部署
    • 驗證
    • mcp安裝
    • palyground

🔥 5 分鐘上手 Firecrawl

Firecrawl 是什么?

一句話:
開源版的 “最強網頁爬蟲 + 清洗引擎”
? 自動把任意網頁 → 結構化 Markdown / JSON
? 支持遞歸整站抓取、JS 渲染、PDF 解析、圖片 alt 自動生成
? 提供 REST API,LangChain / LlamaIndex 官方集成

官方網站

image.png

可以在playground中進行測試

image.png

點擊Get Code可以獲得調用模板代碼

# Install with pip install firecrawl-py
import asyncio
from firecrawl import AsyncFirecrawlAppasync def main():app = AsyncFirecrawlApp(api_key='fc-d7310201c7684ec58408d62fac5d88b2')response = await app.scrape_url(url='https://blog.csdn.net/u012399690/article/details/149668148',		formats= [ 'markdown' ],only_main_content= Trueparse_pdf= True,max_age= 14400000)print(response)asyncio.run(main())

本地部署

官方提供500 credits免費額度,對于經常需要使用或者隱私要求高的用戶可以選擇本地部署。

第一步:拉取代碼

git clone https://github.com/mendableai/firecrawl.git

第二步:修改配置

cp apps/api/.env.example .env

按需修改,為了簡單,可以關閉驗證
image.png

最小配置

NUM_WORKERS_PER_QUEUE=4
PORT=3002
HOST=0.0.0.0
REDIS_URL=redis://redis:6379
REDIS_RATE_LIMIT_URL=redis://redis:6379
PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/html
USE_DB_AUTHENTICATION=false

🐳 啟動

docker compose build   # 第一次拉鏡像
docker compose up -d   # 后臺跑

訪問:

  • API:http://localhost:3002
  • 隊列管理:http://localhost:3002/admin/@/queues

image.png

驗證

cURL命令,可在終端中快速驗證

curl -X POST http://localhost:3002/v0/scrape \-H 'Content-Type: application/json' \-d '{"url": "https://www.ithome.com/0/871/372.htm","formats": [ "markdown" ],"onlyMainContent": true,"parsePDF": true,"maxAge": 14400000}'

返回示例:

{"success": true,"data": {"content": "xxx","markdown": "xxx","linksOnPage": ["https://www.ithome.com/0/871/372.htm#","https://m.ithome.com/",],"metadata": {"ogImage": "https://img.ithome.com/m/images/logo.png","language": "zh","viewport": "width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no","description": "智譜發布新一代旗艦模型GLM-4.5,專為智能體應用打造,綜合能力達到開源SOTA,實測國內最佳。采用混合專家架構,提供兩種模式,高速低成本。API已上線開放平臺BigModel.cn,也可在智譜清言和z.ai免費體驗。#AI大模型# #智譜GLM4.5#","og:image": "https://img.ithome.com/m/images/logo.png","format-detection": "telephone=no","keywords": "智譜,GLM4.5,智能時代,人工智能","apple-itunes-app": "app-id=570610859, app-argument=ithome://news?id=871372&type=news","title": "智譜發布新一代旗艦開源模型 GLM-4.5,專為智能體應用打造 - IT之家","apple-mobile-web-app-status-bar-style": "white","apple-mobile-web-app-capable": "yes","theme-color": "#fff","favicon": "https://m.ithome.com/favicon.ico","scrapeId": "07988df7-f880-4d8e-85ee-c434a2a931c3","sourceURL": "https://www.ithome.com/0/871/372.htm","url": "https://www.ithome.com/0/871/372.htm","contentType": "text/html; charset=utf-8","proxyUsed": "basic","pageStatusCode": 200}},"returnCode": 200
}

示例

image.png

mcp安裝

我們可以通過mcp客戶端,和ai協同工作。以cheery studio為例
復制如下配置,或者在魔搭等mcp廣場進行配置,然后一鍵同步。主要修改API_KEY

{"mcpServers": {"mcp-server-firecrawl": {"command": "npx","args": ["-y", "firecrawl-mcp"],"env": {"FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE"}}}
}

如果需要配置為自建服務

{"mcpServers": {"mcp-server-firecrawl": {"command": "npx","args": ["-y", "firecrawl-mcp"],"env": {"FIRECRAWL_API_URL": "http://localhost:3002","FIRECRAWL_API_KEY": "optional-if-you-enable-auth"}}}
}

image.png

cherry studio中進行調用

image.png

palyground

開源版并沒有提供playground,只能進行api或者mcp調用。這里提供一個簡單的html頁面。
image.png

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8" /><title>Firecrawl 自建可視化 UI</title><meta name="viewport" content="width=device-width,initial-scale=1" /><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" /><link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet" /><style>body {padding-top: 70px;background: #f8f9fa;}.card {box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);}.result-area {max-height: 400px;overflow-y: auto;font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono","Courier New", monospace;font-size: 0.8rem;}.config-panel {transition: all 0.3s ease;}.collapse:not(.show) {display: none;}</style>
</head><body><nav class="navbar navbar-expand navbar-dark bg-primary fixed-top"><div class="container-fluid"><a class="navbar-brand fw-bold" href="#"><i class="bi bi-fire"></i> Firecrawl UI</a><button class="btn btn-outline-light btn-sm" data-bs-toggle="modal" data-bs-target="#configModal"><i class="bi bi-gear"></i> 配置</button></div></nav><div class="container"><!-- 功能區 --><div class="card mb-3"><div class="card-header"><ul class="nav nav-tabs card-header-tabs" id="mainTabs" role="tablist"><li class="nav-item" role="presentation"><button class="nav-link active" id="scrape-tab" data-bs-toggle="tab" data-bs-target="#scrape-pane"type="button" role="tab" aria-controls="scrape-pane" aria-selected="true">📥 單頁抓取</button></li><li class="nav-item" role="presentation"><button class="nav-link" id="crawl-tab" data-bs-toggle="tab" data-bs-target="#crawl-pane" type="button"role="tab" aria-controls="crawl-pane" aria-selected="false">🕸? 整站抓取</button></li></ul></div><div class="card-body"><div class="tab-content" id="mainTabContent"><!-- 單頁抓取面板 --><div class="tab-pane fade show active" id="scrape-pane" role="tabpanel" aria-labelledby="scrape-tab"><div class="mb-3"><label for="scrapeUrl" class="form-label">網頁地址</label><input type="url" class="form-control" id="scrapeUrl" placeholder="https://docs.firecrawl.dev" /><div class="form-text">輸入要抓取的單個網頁地址</div></div><button class="btn btn-primary" id="scrapeBtn" onclick="handleScrape()"><i class="bi bi-download"></i> 立即抓取</button></div><!-- 整站抓取面板 --><div class="tab-pane fade" id="crawl-pane" role="tabpanel" aria-labelledby="crawl-tab"><div class="mb-3"><label for="crawlUrl" class="form-label">網站地址</label><input type="url" class="form-control" id="crawlUrl" placeholder="https://docs.firecrawl.dev" /><div class="form-text">輸入要爬取的網站根地址</div></div><div class="mb-3"><label for="maxPages" class="form-label">最大頁數</label><input type="number" class="form-control" id="maxPages" placeholder="10" min="1" max="100" value="10" /><div class="form-text">限制爬取的最大頁面數量 (1-100)</div></div><button class="btn btn-warning" id="crawlBtn" onclick="handleCrawl()"><i class="bi bi-globe"></i> 開始爬取</button></div></div></div></div><!-- 結果區 --><div class="card mb-3"><div class="card-header d-flex justify-content-between align-items-center"><span>📝 結果預覽</span><button class="btn btn-sm btn-outline-secondary d-none" id="copyBtn" onclick="copyResult()"><i class="bi bi-clipboard"></i> 復制</button></div><div class="card-body"><pre class="result-area border p-2 bg-light" id="result">
等待結果...</pre></div></div></div><!-- 配置彈框 --><div class="modal fade" id="configModal" tabindex="-1" aria-labelledby="configModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h5 class="modal-title" id="configModalLabel"><i class="bi bi-gear"></i> 服務配置</h5><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="baseUrl" class="form-label">Base URL</label><input type="url" class="form-control" id="baseUrl" placeholder="http://localhost:3002"value="http://localhost:3002" /><div class="form-text">Firecrawl 服務的基礎地址</div></div><div class="mb-3"><label for="apiKey" class="form-label">API Key</label><input type="password" class="form-control" id="apiKey" placeholder="可選,無鑒權時留空" /><div class="form-text">如果服務需要鑒權,請輸入 API Key</div></div></div><div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button><button type="button" class="btn btn-primary" onclick="saveConfig()" data-bs-dismiss="modal">保存配置</button></div></div></div></div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>""<script>const $ = (id) => document.getElementById(id);const base = () => $("baseUrl").value.replace(/\/$/, "");const key = () => $("apiKey").value;// 加載保存的配置document.addEventListener('DOMContentLoaded', function () {loadConfig();});function loadConfig() {const savedBaseUrl = localStorage.getItem('firecrawl_baseUrl');const savedApiKey = localStorage.getItem('firecrawl_apiKey');if (savedBaseUrl) $("baseUrl").value = savedBaseUrl;if (savedApiKey) $("apiKey").value = savedApiKey;}function saveConfig() {localStorage.setItem('firecrawl_baseUrl', $("baseUrl").value);localStorage.setItem('firecrawl_apiKey', $("apiKey").value);// 顯示保存成功提示const toast = document.createElement('div');toast.className = 'toast align-items-center text-white bg-success border-0 position-fixed top-0 end-0 m-3';toast.style.zIndex = '9999';toast.innerHTML = `<div class="d-flex"><div class="toast-body"><i class="bi bi-check-circle"></i> 配置已保存</div><button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast"></button></div>`;document.body.appendChild(toast);const bsToast = new bootstrap.Toast(toast);bsToast.show();// 3秒后自動移除setTimeout(() => {if (toast.parentNode) {toast.parentNode.removeChild(toast);}}, 3000);}async function request(path, body) {const headers = { "Content-Type": "application/json" };if (key()) headers["Authorization"] = `Bearer ${key()}`;return fetch(`${base()}${path}`, {method: "POST",headers,body: JSON.stringify(body),}).then((r) => r.json());}async function handleScrape() {const url = $("scrapeUrl").value;if (!url) return alert("請輸入網址");const scrapeBtn = $("scrapeBtn");// 禁用按鈕但保持原有樣式scrapeBtn.disabled = true;$("result").textContent = "抓取中...";$("copyBtn").classList.add("d-none");try {const res = await request("/v0/scrape", {url,pageOptions: { onlyMainContent: true },});$("result").textContent =res.data?.markdown || JSON.stringify(res, null, 2);$("copyBtn").classList.remove("d-none");window.lastResult = res;} catch (error) {$("result").textContent = `抓取失敗: ${error.message}`;} finally {// 恢復按鈕狀態scrapeBtn.disabled = false;}}async function handleCrawl() {const url = $("crawlUrl").value;const limit = parseInt($("maxPages").value) || 10;if (!url) return alert("請輸入網址");const crawlBtn = $("crawlBtn");// 禁用按鈕但保持原有樣式crawlBtn.disabled = true;$("result").textContent = "整站爬取中,請稍等...";$("copyBtn").classList.add("d-none");try {const job = await request("/v0/crawl", { url, limit });if (!job.jobId) {$("result").textContent = JSON.stringify(job, null, 2);crawlBtn.disabled = false;return;}const poll = setInterval(async () => {const headers = { "Content-Type": "application/json" };if (key()) headers["Authorization"] = `Bearer ${key()}`;const response = await fetch(`${base()}/v0/crawl/status/${job.jobId}`, {method: "GET",headers,});const status = await response.json();$("result").textContent = JSON.stringify(status, null, 2);if (status.status === "completed") {clearInterval(poll);window.lastResult = status;$("copyBtn").classList.remove("d-none");crawlBtn.disabled = false;}if (status.status === "failed") {clearInterval(poll);crawlBtn.disabled = false;}}, 2000);} catch (error) {$("result").textContent = `爬取失敗: ${error.message}`;crawlBtn.disabled = false;}}async function copyResult() {try {const dataStr = JSON.stringify(window.lastResult, null, 2);await navigator.clipboard.writeText(dataStr);// 顯示復制成功提示const toast = document.createElement('div');toast.className = 'toast align-items-center text-white bg-success border-0 position-fixed top-0 end-0 m-3';toast.style.zIndex = '9999';toast.innerHTML = `<div class="d-flex"><div class="toast-body"><i class="bi bi-check-circle"></i> 結果已復制到剪貼板</div><button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast"></button></div>`;document.body.appendChild(toast);const bsToast = new bootstrap.Toast(toast);bsToast.show();// 3秒后自動移除setTimeout(() => {if (toast.parentNode) {toast.parentNode.removeChild(toast);}}, 3000);} catch (error) {// 如果剪貼板 API 不可用,使用備用方法const textArea = document.createElement('textarea');textArea.value = JSON.stringify(window.lastResult, null, 2);document.body.appendChild(textArea);textArea.select();document.execCommand('copy');document.body.removeChild(textArea);alert('結果已復制到剪貼板');}}</script>
</body></html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916577.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法訓練營day31 貪心算法⑤56. 合并區間、738.單調遞增的數字 、968.監控二叉樹

貪心算法的最后一篇博客&#xff01;前面兩道題都是比較簡單的思路&#xff0c;重點理解一下最后一道題即可。有一說一&#xff0c;進入到貪心算法這一章節之后&#xff0c;我的博客里和代碼注釋里的內容明顯少了很多&#xff0c;因為很多貪心的題目我覺得不需要很復雜的文字說…

Jenkins流水線部署+webhook2.0

文章目錄1. 環境2. 用到的插件3. 流水線部署腳本1. 環境 Centos7Jenkins2.5.0JDKopen17阿里云倉庫 注意&#xff1a;這個版本兼容需要特別注意&#xff0c;要不然會很麻煩 2. 用到的插件 Generic Webhook Trigger 3. 流水線部署腳本 兼容鉤子部署&#xff08;webhook&…

IDM下載失敗排查

網絡連接問題排查檢查網絡連接是否穩定&#xff0c;確保能夠正常訪問互聯網 測試其他下載工具或瀏覽器是否能夠正常下載 嘗試關閉防火墻或殺毒軟件&#xff0c;排除安全軟件攔截的可能性代理和VPN設置檢查確認IDM的代理設置是否正確&#xff0c;是否與系統代理一致 檢查是否使用…

Anaconda安裝時的幾個操作

一、安裝Anaconda 其實Anaconda的安裝比較簡單&#xff0c;點擊next就好了。在安裝中需要注意以下兩點&#xff1a; 1、選擇安裝路徑 在安裝時&#xff0c;路徑最好選擇非C盤&#xff0c;且路徑中不要出現中文&#xff0c;以免后期運行代碼時出現不必要的錯誤。 我安裝時&…

網易易盾、騰訊ACE等主流10款游戲反外掛系統對比

本文將深入對比10款游戲反外掛系統&#xff1a;1.網易易盾&#xff1b;2.Ricochet Anti?Cheat&#xff1b;3.BattlEye&#xff1b;4.幾維安全手游智能反外掛系統&#xff1b;5.伏魔AI反外掛&#xff1b;6.Riot Vanguard&#xff1b;7.Xigncode3&#xff1b;8.盛大GPK&#xff…

wpa_supplicant-2.10交叉編譯

參考文章:https://blog.csdn.net/weixin_45783574/article/details/145810790 1、Openssl交叉編譯 1.1 下載openssl-1.1.1t.tar.gz 下載網址: https://openssl-library.org/source/old/1.1.1/index.html1.2 編譯 sudo tar xvf openssl-1.1.1t.tar.gz cd openssl-1.1

源碼解讀SpringCloudAlibaba Nacos2.x

Nacos 服務注冊 Nacos 服務注冊時&#xff0c;客戶端會將自己的信息注冊到Nicosserver上&#xff0c;形成key-value組合&#xff0c;其中key通常是服務名稱&#xff0c;value是實例地址信息。在二點X版本中&#xff0c;客戶端通過Spring Boot的擴展機制(例如web_initialized事件…

Windows 11 下 Anaconda 命令修復指南及常見問題解決

Windows 11 下 Anaconda 命令修復指南及常見問題解決 在使用 Anaconda 過程中&#xff0c;可能會遇到環境損壞、更新失敗、包依賴沖突等問題。本文整理了一套通過命令行修復 Anaconda 的完整方案&#xff0c;適用于 Windows 11 系統&#xff0c;同時補充了權威參考鏈接供深入學…

安寶特案例丨全球連線!安寶特Vuzix與RodsCones共筑實時手術教育平臺

安寶特Vuzix與合作伙伴Rods&Cones協作&#xff0c;為Rocamed在布拉格UROSANIT診所舉辦的創新型實時手術直播研討會提供技術賦能。 本次直播通過合作伙伴Rods&Cones軟件平臺搭載安寶特Vuzix智能眼鏡&#xff0c;成功連接來自9國、3大洲、6個時區的27位醫生&#xff0c;…

【Spring Boot 快速開發】一、入門

目錄Spring Boot 簡介Web 入門Spring Boot 快速入門HTTP 協議概述請求協議響應協議解析協議TomcatSpring Boot 簡介 Spring Boot 是由 Pivotal 團隊&#xff08;后被 VMware 收購&#xff09;開發的基于 Spring 框架的開源項目&#xff0c;于 2014 年首次發布。其核心目標是簡…

laravel chunkById導出數據亂序問題

2025年7月28日17:47:29 這幾天在做數據導出優化&#xff0c;使用xlswriter作為導出組件&#xff0c;但是發現在 使用 $base->chunkById(2000, function ($list) use ($writer, $sheet1) { 發現導出的數據是亂的&#xff0c;偶爾有些重復&#xff0c;偶爾有些少了&#xff0c…

Spring IOC與DI

spring的兩大思想:IOC與AOP一、ioc的概念什么叫控制翻轉?之前:對象的使用方,創建對象,對象的控制權,在對象的使用方手中.spring:對象的控制權交給了spring.舉個例子:智能駕駛,之前車的使用權在人手中,而現在在ai手中,這就是控制反轉.什么叫ioc:之前車企生產車需要做整個車,費事…

【圖像處理基石】Segment Anything Model (SAM) 調研

Segment Anything Model (SAM) 是由 Meta AI 開發的革命性圖像分割模型,它能夠對圖像中的任何物體進行分割,無需針對特定類別進行訓練。SAM 具有以下特點: 通用性:可以分割任何視覺對象,無論是否見過該類別 靈活性:支持多種輸入提示(點、框、掩碼或文本) 實時性:在普通…

unisS5800XP-G交換機配置命令之端口篇

一、批量配置端口(1) 進入系統視圖。system-view(2) 指定接口范圍&#xff0c;并進入接口批量配置視圖。¡ 指定一個不帶別名的接口列表。interface range { interface-type interface-number [ to interface-type interface-number ] } &<1-24>¡…

MySQL中的 redolog

什么是redo log如果我們只在內存的 Bufer Pool中修改了頁面&#xff0c;假設在事務提交后突然發生了某個故障導致內存中的數據都失效了&#xff0c;那么這個已經提交的事務在數據庫中所做的更改也就跟著丟失了&#xff0c;這是我們所不能忍受的。那么&#xff0c;如何保證這個持…

數據結構之 【排序】(非遞歸實現快速排序)

目錄 1.引入 2.非遞歸實現快排的思想 3.非遞歸實現快排圖解 4.完整代碼 1.引入 遞歸不可避免的話題就是防止棧溢出 所以程序員需要具備遞歸改非遞歸的能力 &#xff0c;一般來說&#xff0c;抓住遞歸中變化的量是關鍵 void QuickSort(int* a, int left, int right){if (left…

CLAP文本-音頻基礎模型: LEARNING AUDIO CONCEPTS FROM NATURAL LANGUAGE SUPERVISION

一、TL&#xff1b;DR 現在的做法有什么問題&#xff1f;主流范式是 “一個類別標簽對應多個錄音”&#xff0c;需要提前標注預測預先定義的類別&#xff0c;只能做閉集理解&#xff0c;失去靈活性 我們怎么做&#xff1f;通過兩個編碼器和對比學習機制建立語言與音頻的關聯&a…

Flink2.0學習筆記:Stream API 常用轉換算子

EC0720/FLINKTASK-TEST-STREAM/demo at master stevensu1/EC0720 先看測試效果&#xff1a;控制臺 測試效果&#xff1a;監控服務端 主要的轉換算子包括&#xff1a; 轉換算子 filter:過濾包含“Flink”的輸入 轉換算子 map: 將每行數據前添加“Processed: ”并轉為大寫 轉…

一、Python環境、Jupyter與Pycharm

安裝Python由于RAG項目中所需要的Python版本必須高于3.8&#xff0c;經過篩選&#xff0c;最終選擇了3.10.11這個版本py --version Python 3.10.11安裝過程略過&#xff0c;但對于幾個基礎的命令作個筆記記錄where python找到python啟動器的位置D:\>where python C:\Users\x…

Flink CEP 動態模板與規則動態修改實踐完全手冊

1. Flink CEP:從靜態規則到動態江湖 Flink 的復雜事件處理(CEP)庫就像一個武功高強的俠客,能從數據流中精準捕獲特定模式,堪稱流處理界的“降龍十八掌”。但問題來了:傳統 CEP 規則通常是寫死在代碼里的,就像刻在石碑上的武功秘籍,改起來費勁不說,還得重啟應用,簡直…