免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

将网站转变为大模型训练数据的神器:自动化爬虫工具FireCrawl,两周斩获4K Star!

发布日期:2024-05-22 06:07:21 浏览次数: 5513
作者:AI进修生

微信搜一搜,关注“AI进修生”

整个网站转变为适用于大模型训练的 Markdown 或结构化数据。使用单个 API 进行抓取、爬行、搜索和提取。

Hello,大家好,我是Aitrainee。今天给大家介绍一下Firecrawl,这是一个实用的爬虫工具。

Firecrawl 是什么?

Firecrawl就像一个智能机器人,从你给定的网页开始,自动找到并访问这个网站上的所有其他页面。它会提取每个页面中的主要内容,去掉广告和其他不需要的东西,然后把这些信息整理好,让你方便使用。而且,它不需要网站提供的地图文件来找到这些页面。

Firecrawl可以从你指定的网页开始,自动访问这个网站上所有能打开的子页面。就像你点开一个链接后,它会继续点开这个页面里的所有链接,直到把所有页面都访问一遍。只要这些页面没有被网站的设置阻止(比如没有被robots.txt文件禁止访问),Firecrawl就能爬取它们。

此外,Firecrawl还会从每个页面中提取有用的信息,去掉不重要的内容(比如广告和导航栏),并把这些数据整理成易于使用的格式,比如Markdown。

站点地图是什么?

站点地图(sitemap)是一个网站提供的文件,列出网站上的所有页面。它帮助搜索引擎或爬虫更快地找到和访问这些页面。站点地图通常是一个XML文件,里面包含网站上所有页面的链接。

总结一下:

  1. 1. Firecrawl 会自动从你给定的网页开始,遍历网站上的所有链接,爬取所有能访问的页面。

  2. 2. 它会去除杂乱信息,提取有用的数据并整理好。

  3. 3. 无需站点地图,Firecrawl也能找到并爬取所有页面。

演示视频

油管博主:开发者文稿 / 字幕译:Aitrainee,链接在这里

https://www.youtube.com/watch?v=fDSM7chMo5E

下面提供官方的文档介绍、相关资源、部署教程等,进一步支撑你的行动,以提升本文的帮助力。

? Firecrawl


我们提供了易于使用的API托管版本。您可以在 
这里 找到演示和文档。您也可以自行托管后台服务。

  • •  API

  • •  Python SDK

  • •  Node SDK

  • •  Langchain集成 ??

  • •  Llama Index集成 ?

  • •  Langchain JS集成 ??

  • •  想要其他SDK或集成?请通过打开issue告知我们。

要在本地运行,请参考 指南

API密钥

要使用API,您需要在 Firecrawl 注册并获取API密钥。

爬取

用于爬取一个URL及其所有可访问的子页面。此操作提交一个爬取任务并返回一个作业ID以检查爬取状态。

curl -X POST https://api.firecrawl.dev/v0/crawl \
    -'Content-Type: application/json' \
    -'Authorization: Bearer YOUR_API_KEY' \
    -'{
      "url": "https://mendable.ai"
    }'

返回一个作业ID

{ "jobId": "1234-5678-9101" }

检查爬取作业

用于检查爬取作业的状态并获取其结果。

curl -X GET https://api.firecrawl.dev/v0/crawl/status/1234-5678-9101 \
  -'Content-Type: application/json' \
  -'Authorization: Bearer YOUR_API_KEY'
{
  "status": "completed",
  "current": 22,
  "total": 22,
  "data": [
    {
      "content": "Raw Content ",
      "markdown": "# Markdown Content",
      "provider": "web-scraper",
      "metadata": {
        "title": "Mendable | AI for CX and Sales",
        "description": "AI for CX and Sales",
        "language": null,
        "sourceURL": "https://www.mendable.ai/"
      }
    }
  ]
}

爬取

用于爬取一个URL并获取其内容。

curl -X POST https://api.firecrawl.dev/v0/scrape \
    -'Content-Type: application/json' \
    -'Authorization: Bearer YOUR_API_KEY' \
    -'{
      "url": "https://mendable.ai"
    }'

响应:

{
  "success": true,
  "data": {
    "content": "Raw Content ",
    "markdown": "# Markdown Content",
    "provider": "web-scraper",
    "metadata": {
      "title": "Mendable | AI for CX and Sales",
      "description": "AI for CX and Sales",
      "language": null,
      "sourceURL": "https://www.mendable.ai/"
    }
  }
}

搜索(测试版)

用于搜索网络,获取最相关的结果,爬取每个页面并返回Markdown格式的数据。

curl -X POST https://api.firecrawl.dev/v0/search \
    -'Content-Type: application/json' \
    -'Authorization: Bearer YOUR_API_KEY' \
    -'{
      "query": "firecrawl",
      "pageOptions": {
        "fetchPageContent": true // 设置为false可快速获取搜索引擎结果页面
      }
    }'
{
  "success": true,
  "data": [
    {
      "url": "https://mendable.ai",
      "markdown": "# Markdown Content",
      "provider": "web-scraper",
      "metadata": {
        "title": "Mendable | AI for CX and Sales",
        "description": "AI for CX and Sales",
        "language": null,
        "sourceURL": "https://www.mendable.ai/"
      }
    }
  ]
}

智能提取(测试版)

用于从爬取的页面中提取结构化数据。

curl -X POST https://api.firecrawl.dev/v0/scrape \
    -'Content-Type: application/json' \
    -'Authorization: Bearer YOUR_API_KEY' \
    -'{
      "url": "https://www.mendable.ai/",
      "extractorOptions": {
        "mode": "llm-extraction",
        "extractionPrompt": "Based on the information on the page, extract the information from the schema. ",
        "extractionSchema": {
          "type": "object",
          "properties": {
            "company_mission": {
                      "type": "string"
            },
            "supports_sso": {
                      "type": "boolean"
            },
            "is_open_source": {
                      "type": "boolean"
            },
            "is_in_yc": {
                      "type": "boolean"
            }
          },
          "required": [
            "company_mission",
            "supports_sso",
            "is_open_source",
            "is_in_yc"
          ]
        }
      }
    }'
{
    "success": true,
    "data": {
      "content": "Raw Content",
      "metadata": {
        "title": "Mendable",
        "description": "Mendable allows you to easily build AI chat applications. Ingest, customize, then deploy with one line of code anywhere you want. Brought to you by SideGuide",
        "robots": "follow, index",
        "ogTitle": "Mendable",
        "ogDescription": "Mendable allows you to easily build AI chat applications. Ingest, customize, then deploy with one line of code anywhere you want. Brought to you by SideGuide",
        "ogUrl": "https://mendable.ai/",
        "ogImage": "https://mendable.ai/mendable_new_og1.png",
        "ogLocaleAlternate": [],
        "ogSiteName": "Mendable",
        "sourceURL": "https://mendable.ai/"
      },
      "llm_extraction": {
        "company_mission": "Train a secure AI on your technical resources that answers customer and employee questions so your team doesn't have to",
        "supports_sso": true,
        "is_open_source": false,
        "is_in_yc": true
      }
    }
}

使用Python SDK

安装Python SDK

pip install firecrawl-py

爬取一个网站

from firecrawl import FirecrawlApp

app = FirecrawlApp(api_key="YOUR_API_KEY")

crawl_result = app.crawl_url('mendable.ai', {'crawlerOptions': {'excludes': ['blog/*']}})

# 获取Markdown内容
for result in crawl_result:
    print(result['markdown'])

爬取一个URL

要爬取单个URL,请使用 scrape_url 方法。它接收URL作为参数并返回爬取的数据字典。

url = 'https://example.com'
scraped_data = app.scrape_url(url)

从URL中提取结构化数据

通过LLM提取,您可以轻松地从任何URL中提取结构化数据。我们支持Pydantic模型,使其更容易使用。以下是使用方法:

class ArticleSchema(BaseModel):
    title: str
    points: int 
    by: str
    commentsURL: str

class TopArticlesSchema(BaseModel):
    top: List[ArticleSchema] = Field(..., max_items=5, description="Top 5

 stories"
)

data = app.scrape_url('https://news.ycombinator.com', {
    'extractorOptions': {
        'extractionSchema': TopArticlesSchema.model_json_schema(),
        'mode': 'llm-extraction'
    },
    'pageOptions':{
        'onlyMainContent': True
    }
})
print(data["llm_extraction"])

搜索查询

执行网络搜索,获取顶级结果,提取每个页面的数据,并返回它们的Markdown格式内容。

query = 'What is Mendable?'
search_result = app.search(query)

使用Node SDK

安装

要安装Firecrawl Node SDK,可以使用npm:

npm install @mendable/firecrawl-js

使用方法

  1. 1. 从 firecrawl.dev 获取API密钥。

  2. 2. 将API密钥设置为环境变量 FIRECRAWL_API_KEY,或将其作为参数传递给 FirecrawlApp 类。

爬取URL

要爬取单个URL并进行错误处理,请使用 scrapeUrl 方法。它接收URL作为参数并返回爬取的数据字典。

try {
  const url = 'https://example.com';
  const scrapedData = await app.scrapeUrl(url);
  console.log(scrapedData);
} catch (error) {
  console.error(
    'Error occurred while scraping:',
    error.message
  );
}

爬取网站

要爬取网站并进行错误处理,请使用 crawlUrl 方法。它接收起始URL和可选参数作为参数。params 参数允许您指定爬取任务的附加选项,例如最大爬取页面数、允许的域和输出格式。

const crawlUrl = 'https://example.com';
const params = {
  crawlerOptions: {
    excludes: ['blog/'],
    includes: [], // 留空以包含所有页面
    limit: 1000,
  },
  pageOptions: {
    onlyMainContent: true
  }
};
const waitUntilDone = true;
const timeout = 5;
const crawlResult = await app.crawlUrl(
  crawlUrl,
  params,
  waitUntilDone,
  timeout
);

检查爬取状态

要检查爬取任务的状态并进行错误处理,请使用 checkCrawlStatus 方法。它接收作业ID作为参数并返回爬取任务的当前状态。

const status = await app.checkCrawlStatus(jobId);
console.log(status);

从URL中提取结构化数据

通过LLM提取,您可以轻松地从任何URL中提取结构化数据。我们支持zod模式,使其更容易使用。以下是使用方法:

import FirecrawlApp from "@mendable/firecrawl-js";
import { z } from "zod";

const app = new FirecrawlApp({
  apiKey: "fc-YOUR_API_KEY",
});

// 定义要提取内容的模式
const schema = z.object({
  top: z
    .array(
      z.object({
        title: z.string(),
        points: z.number(),
        by: z.string(),
        commentsURL: z.string(),
      })
    )
    .length(5)
    .describe("Hacker News上的前5个故事"),
});

const scrapeResult = await app.scrapeUrl("https://news.ycombinator.com", {
  extractorOptions: { extractionSchema: schema },
});

console.log(scrapeResult.data["llm_extraction"]);

搜索查询

通过 search 方法,您可以在搜索引擎中搜索查询并获取顶级结果及每个结果的页面内容。该方法接收查询作为参数并返回搜索结果。

const query = 'what is mendable?';
const searchResults = await app.search(query, {
  pageOptions: {
    fetchPageContent: true // 获取每个搜索结果的页面内容
  }
});


参考链接:
[1]https://github.com/mendableai/firecrawl


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅