支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Firecrawl:颠覆传统爬虫的AI黑科技,如何为LLM时代赋能

发布日期:2025-04-18 08:48:40 浏览次数: 1564 作者:阿生智测
推荐语

FireCrawl:AI网络爬虫的革新者,为LLM时代提供强大数据支持。

核心内容:
1. FireCrawl的介绍及其在AI模型训练中的应用
2. 主要功能:爬取、抓取、映射、LLM提取等
3. 技术原理:网页爬取、内容解析、数据提取与结构化、动态内容处理、反反爬虫技术
4. 实例演示:获取API KEY、安装库、抓取单个页面数据

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

FireCrawl是什么

‌FireCrawl‌是由Mendable.ai开发的一款强大的AI网络爬虫工具,能够智能爬取网站及其所有可访问的子页面数据,并将收集的内容转换为Json,Markdown,Html等多种格式数据。它具备强大的抓取能力,无论是静态页面还是复杂的动态页面,甚至JavaScript呈现的内容都能抓取到。

FireCrawl特别适用于AI模型训练、检索增强生成(RAG)和数据驱动的开发等多种应用场景‌

FireCrawl 的主要功能

爬取:自动爬取网站及其所有可访问的子页面,将内容转换为 Json,Markdown等格式数据。 抓取:抓取单个 URL 的内容,并以 Markdown、结构化数据等格式提供。 映射:输入网站 URL,快速获取网站上的所有链接。 LLM 提取:从抓取的页面中提取结构化数据。 批量抓取:同时抓取多个 URL。 网页交互:在抓取内容之前,对网页执行点击、滚动、输入等操作。 搜索:搜索网络,获取最相关的结果,并抓取页面内容。

FireCrawl 的技术原理

网页爬取:FireCrawl利用网络爬虫技术,通过递归访问网站页面,根据提供的URL自动爬取网站及其所有可访问的子页面。它能够处理动态网页内容,并利用大型语言模型进行数据提取‌。 内容解析:FireCrawl解析网页的HTML内容,提取所需数据。它能够处理由JavaScript渲染的动态内容,确保能抓取由用户交互生成的数据‌。 数据提取与结构化:FireCrawl基于自然语言处理技术,从非结构化的网页内容中提取结构化数据。它将提取的内容转换成适合大型语言模型处理的格式,如Markdown或结构化数据‌。 动态内容处理:FireCrawl能够处理动态内容,包括那些需要通过用户交互才能生成的内容。这使得它适用于各种复杂的网站抓取任务‌。 反反爬虫技术:为了绕过网站的反爬虫机制,FireCrawl使用代理、自定义头部等技术,确保能够顺利抓取数据‌。

实例演示

获取FireCrawl API KEY

1、登录网站:https://firecrawl.dev, 注册账号 2、点击 Dashboard 按钮 3、复制API KEY

安装firecrawl库

pip install firecrawl-py

根目录下创建.env文件

FIRECRAWL_API_KEY=FireCrawl API KEY

抓取单个页面数据

    def scrape_page(self, url: str, schema: BaseModel, 
                   formats: List[str] = ['json'], 
                   prompt: Optional[str] = None)
 -> Dict[str, Any]:

        """抓取单个页面的数据
        
        Args:
            url: 要抓取的URL
            schema: Pydantic模型,定义返回数据的结构
            formats: 返回数据的格式列表,默认为['json']
            prompt: 可选的提示信息,帮助抓取特定内容
            
        Returns:
            包含抓取结果的字典
        """

        try:
            params = {
                'formats': formats,
                'jsonOptions': {
                    'schema': schema.model_json_schema(),
                }
            }
            
            if prompt:
                params['jsonOptions']['prompt'] = prompt
                
            logger.info(f"开始抓取页面: {url}")
            result = self.app.scrape_url(url, params)
            logger.info(f"页面抓取完成: {url}")
            return result
        except Exception as e:
            logger.error(f"抓取页面时出错: {url}, 错误: {str(e)}")
            raise

爬取网站数据

    def crawl_website(self, url: str, schema: BaseModel, 
                     limit: int = 10, max_depth: int = 2,
                     formats: List[str] = ['json'],
                     prompt: Optional[str] = None)
 -> List[Dict[str, Any]]:

        """爬取整个网站或指定深度的多个页面
        
        Args:
            url: 起始URL
            schema: Pydantic模型,定义返回数据的结构
            limit: 最大抓取页面数量
            max_depth: 最大抓取深度
            formats: 返回数据的格式列表,默认为['json']
            prompt: 可选的提示信息,帮助抓取特定内容
            
        Returns:
            包含所有抓取结果的列表
        """

        try:
            params = {
                'limit': limit,
                'maxDepth': max_depth,
                'scrapeOptions': {
                    'formats': formats,
                    'jsonOptions': {
                        'schema': schema.model_json_schema(),
                    }
                }
            }
            
            if prompt:
                params['scrapeOptions']['jsonOptions']['prompt'] = prompt
                
            logger.info(f"开始爬取网站: {url}, 限制: {limit}页, 深度: {max_depth}")
            results = self.app.crawl_url(url, params)
            logger.info(f"网站爬取完成: {url}, 共抓取{len(results)}个结果")
            return results
        except Exception as e:
            logger.error(f"爬取网站时出错: {url}, 错误: {str(e)}")
            raise

定义结构化数据

class Product(BaseModel):
    """产品信息模型"""
    name: str = Field(description='产品名称')
    price: Optional[str] = Field(description='产品价格')
    description: Optional[str] = Field(description='产品描述')
    rating: Optional[float] = Field(description='产品评分')
    

class ProductList(BaseModel):
    """产品列表模型"""
    products: List[Product] = Field(description='产品列表')

输出Json格式数据

{
  "metadata": {
    "viewport""width=device-width, initial-scale=1",
    "title""Your Store",
    "description""My Store",
    "language""en",
    "scrapeId""aa78ed8b-5a05-4cd9-b679-0a81012abcd1",
    "sourceURL""https://demo.opencart.com/",
    "url""https://demo.opencart.com/",
    "statusCode"200
  },
"json": {
    "products": [
      {
        "name""MacBook",
        "price""$602.00",
        "description""Powered by an Intel Core 2 Duo processor at speeds up to 2.16GHz, t..",
        "rating"null
      },
      {
        "name""iPhone",
        "price""$123.20",
        "description""iPhone is a revolutionary new mobile phone that allows you to make a call by simply tapping a name o..",
        "rating"null
      },
      {
        "name""Apple Cinema 30\"",
        "price""$110.00",
        "description""The 30-inch Apple Cinema HD Display delivers an amazing 2560 x 1600 pixel resolution. Designed speci..",
        "rating"null
      },
      {
        "name""Canon EOS 5D",
        "price""$98.00",
        "description""Canon's press material for the EOS 5D states that it 'defines (a) new D-SLR category', while we're n..",
        "rating"null
      }
    ]
  }
}

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

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

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

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

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询