跳转到主要内容
将 Firecrawl 与 Google 的 Gemini 集成,以构建由网页数据驱动的 AI 应用。

安装与配置

npm install @mendable/firecrawl-js @google/genai
创建“.env”文件:
FIRECRAWL_API_KEY=your_firecrawl_key
GEMINI_API_KEY=your_gemini_key
注意: 如果使用 Node 版本低于 20,请安装 dotenv,并在代码中添加 import 'dotenv/config'

抓取 + 摘要

此示例演示一个简单的工作流:抓取网站,并使用 Gemini 对内容进行摘要。
import FirecrawlApp from '@mendable/firecrawl-js';
import { GoogleGenAI } from '@google/genai';

const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const scrapeResult = await firecrawl.scrape('https://firecrawl.dev', {
    formats: ['markdown']
});

console.log('抓取内容长度:', scrapeResult.markdown?.length);

const response = await ai.models.generateContent({
    model: 'gemini-2.5-flash',
    contents: `总结: ${scrapeResult.markdown}`,
});

console.log('摘要:', response.text);

内容分析

本示例演示如何利用 Gemini 的多轮对话能力分析网站内容。
import FirecrawlApp from '@mendable/firecrawl-js';
import { GoogleGenAI } from '@google/genai';

const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const scrapeResult = await firecrawl.scrape('https://news.ycombinator.com/', {
    formats: ['markdown']
});

console.log('抓取内容长度:', scrapeResult.markdown?.length);

const chat = ai.chats.create({
    model: 'gemini-2.5-flash'
});

// 查询 Hacker News 前 3 条热门内容
const result1 = await chat.sendMessage({
    message: `根据 Hacker News 的网站内容,当前排名前 3 的热门内容是什么?\n\n${scrapeResult.markdown}`
});
console.log('前 3 条热门内容:', result1.text);

// 查询 Hacker News 第 4 和第 5 条热门内容
const result2 = await chat.sendMessage({
    message: `接下来,从相同内容中查询 Hacker News 排名第 4 和第 5 的热门内容是什么?`
});
console.log('第 4 和第 5 条热门内容:', result2.text);

结构化提取

此示例演示如何使用 Gemini 的 JSON 模式,从抓取的网站内容中提取结构化数据。
import FirecrawlApp from '@mendable/firecrawl-js';
import { GoogleGenAI, Type } from '@google/genai';

const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const scrapeResult = await firecrawl.scrape('https://stripe.com', {
    formats: ['markdown']
});

console.log('抓取内容长度:', scrapeResult.markdown?.length);

const response = await ai.models.generateContent({
    model: 'gemini-2.5-flash',
    contents: `提取公司信息: ${scrapeResult.markdown}`,
    config: {
        responseMimeType: 'application/json',
        responseSchema: {
            type: Type.OBJECT,
            properties: {
                name: { type: Type.STRING },
                industry: { type: Type.STRING },
                description: { type: Type.STRING },
                products: {
                    type: Type.ARRAY,
                    items: { type: Type.STRING }
                }
            },
            propertyOrdering: ['name', 'industry', 'description', 'products']
        }
    }
});

console.log('提取的公司信息:', response?.text);
更多示例请参见 Gemini 文档