proxy 参数指定代理类型。
代理类型
- basic:适用于抓取大多数站点的代理。速度快,通常能正常工作。
- enhanced:用于在保持隐私的前提下抓取复杂站点的增强型代理。速度较慢,但在某些站点上更可靠。
- auto:如果使用 basic 代理抓取失败,Firecrawl 会自动切换为 enhanced 代理并重试抓取。如果使用 enhanced 重试成功,该次抓取将计费 5 个积分;如果首次使用 basic 即成功,则仅按常规费用计费。
使用增强模式
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key='fc-YOUR-API-KEY')
# 选择代理类型:'basic' | 'enhanced' | 'auto'
doc = firecrawl.scrape('https://example.com', formats=['markdown'], proxy='auto')
print(doc.warning or 'ok')
import Firecrawl from '@mendable/firecrawl-js';
const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });
// 选择代理类型:'basic' | 'enhanced' | 'auto'
const doc = await firecrawl.scrape('https://example.com', {
formats: ['markdown'],
proxy: 'auto'
});
console.log(doc.warning || 'ok');
// 选择代理类型:'basic' | 'enhanced' | 'auto'
curl -X POST https://api.firecrawl.dev/v2/scrape \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer fc-YOUR-API-KEY' \
-d '{
"url": "https://example.com",
"proxy": "auto"
}'
将 Enhanced 用作重试机制
metadata.statusCode 字段中遇到特定错误状态码(401、403 或 500),再使用 enhanced 模式重试。这些状态码可能表明网站正在阻止你的请求。
# pip install firecrawl-py
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="YOUR_API_KEY")
# First try with basic proxy
try:
content = firecrawl.scrape("https://example.com")
# Check if we got an error status code
status_code = content.get("metadata", {}).get("statusCode")
if status_code in [401, 403, 500]:
print(f"收到状态码 {status_code},改用 enhanced 代理重试")
# Retry with enhanced proxy
content = firecrawl.scrape("https://example.com", proxy="enhanced")
print(content["markdown"])
except Exception as e:
print(f"Error: {e}")
# Retry with enhanced proxy on exception
try:
content = firecrawl.scrape("https://example.com", proxy="enhanced")
print(content["markdown"])
except Exception as e:
print(f"Enhanced proxy also failed: {e}")
// npm install @mendable/firecrawl-js
import { Firecrawl } from '@mendable/firecrawl-js';
const firecrawl = new Firecrawl({ apiKey: 'YOUR_API_KEY' });
// Function to scrape with retry logic
async function scrapeWithRetry(url) {
try {
// First try with default proxy
const content = await firecrawl.scrape(url);
// Check if we got an error status code
const statusCode = content?.metadata?.statusCode;
if ([401, 403, 500].includes(statusCode)) {
console.log(`收到状态码 ${statusCode},改用 enhanced 代理重试`);
// 使用 enhanced 代理重试
return await firecrawl.scrape(url, {
proxy: 'enhanced'
});
}
return content;
} catch (error) {
console.error(`Error: ${error.message}`);
// Retry with enhanced proxy on exception
try {
return await firecrawl.scrape(url, {
proxy: 'enhanced'
});
} catch (retryError) {
console.error(`Enhanced proxy also failed: ${retryError.message}`);
throw retryError;
}
}
}
// Usage
const content = await scrapeWithRetry('https://example.com');
console.log(content.markdown);
# First try with default proxy
RESPONSE=$(curl -s -X POST https://api.firecrawl.dev/v2/scrape \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"url": "https://example.com"
}')
# Extract status code from response
STATUS_CODE=$(echo $RESPONSE | jq -r '.data.metadata.statusCode')
# Check if status code indicates we should retry with enhanced
if [[ "$STATUS_CODE" == "401" || "$STATUS_CODE" == "403" || "$STATUS_CODE" == "500" ]]; then
echo "收到状态码 $STATUS_CODE,改用 enhanced 代理重试"
# Retry with enhanced proxy
curl -X POST https://api.firecrawl.dev/v2/scrape \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"url": "https://example.com",
"proxy": "enhanced"
}'
else
# Output the original response
echo $RESPONSE
fi
