AI数据爬虫工具Firecrawl部署安装及Dify调用方法

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

简介

Firecrawl 是一个可以提供 API 服务的开源爬虫工具,我们只需要给它一个 URL,无需提供网站地图(sitemap),它就能抓取该 URL 的当前网页或更深层的网页,并可以把抓到的数据转变成 markdown 格式,这种格式更适合 LLM 阅读,在当今的 AI 浪潮下可以说是非常适合了。
在这里插入图片描述

截至 2025 年 3 月,Firecrawl 支持以下功能:

  • Scrape:抓取 URL 当前页面的内容,可以以 markdown 格式返回。
  • Crawl:递归抓取 URL 的子域,并可以以 markdown 格式返回内容。
  • Map:可以非常快速的获取输入网站的所有 URL。
  • Extract:使用 LLMs 从页面中提取结构化数据。
前期准备

一、环境要求

  • 硬件要求:2 核、4GB 内存、50GB 硬盘。
  • 软件要求:Ubuntu 24.04(VMware 虚拟环境)、Docker、Git。

二、网络环境

  • 本地网络:部署时可以使用 VMware 的 NAT 模式,如果只是本机使用就已经无需调整了,如果是需要内网中为其他设备提供服务,那就需要配置成 bridge(桥接)模式了。
  • 外部网络:我们是把 Firecrawl 部署在 docker 中,所以构建时需要从网络上拉取镜像,国内虽然有镜像源,但是并没有外面的全,所以可能会导致超时导致构建失败,所以提前准备一个靠谱的代理(科学上网)是非常必要的。

三、Docker 的安装
关于 Docker 的安装在这里就不进行细说了,可以跟着这篇博客来操作:https://blog.youkuaiyun.com/awei0916/article/details/147522417

Firecrawl 的安装

一、检查系统的网络环境
在装好 Ubuntu 系统后最先开始检查的及时网络问题了,首先我们要把之前提到的代理打开,并调节到全局模式(拉取镜像的成败关键)。

同时即使开了代理有的还是会失败,这是由于运营商的问题,因为每个运营商对于不同 IP 访问的路由设置都不一样,目前在广东测试发现电信是最好使的。

之后就进入 Ubuntu 虚拟机进行 ping 测,命令如下:

ping www.baidu.com
ping www.qq.com

如果到最后实在是没办法了,可以拿我提前安装好的镜像直接导入到 docker 当中来使用,这样就可以避免网络问题了,链接在“备份与加载 Firecrawl 的镜像”的部分。

二、下载 Firecrawl 源码
Firecrawl 是一个开源软件,我们可以直接上 Github 上搜索并下载其源码,链接为:https://github.com/mendableai/firecrawl 可以直接下载 ZIP 压缩包然后通过 WinSCP 之类的软件传出到 Ubuntu 当中。

  1. 本次我们使用 git 命令来克隆代码

    • Ubuntu

      sudo apt-get install -y git
      
    • Windows
      直接打开该链接下载:https://git-scm.com/downloads。

      下载完成后双击安装,安装选项默认即可。

  2. 然后我们去 Github 上获取克隆链接,如下图所示。

    进入命令行输入以下命令(该命令会下载到当前所在目录下):

    # 例如,当前目录是 /root/ 他就会下载到这个目录下
    cd /root/
    git clone https://github.com/mendableai/firecrawl.git
    

三、Firecrawl 环境变量与配置文件的修改
下载完成源码后我们需要准备两个文件,分别是 .envdocker-compose.yaml

  1. .env:该文件就是该 Firecrawl 的环境变量,api key 之类的都是在该文件中设置,在 ./firecrawl/apps/api 目录下有一个 .env.example 的参考文件。

    使用下面的命令重命名为 .env

    cd ./firecrawl/apps/api/
    cp .env.example .env
    

    .env 文件中修改了以下配置:

    # .env
    
    # ===== Required ENVS ======
    NUM_WORKERS_PER_QUEUE=8 
    PORT=3002
    HOST=0.0.0.0
    
    #for self-hosting using docker, use redis://redis:6379. For running locally, use redis://localhost:6379
    REDIS_URL=redis://redis:6379
    
    #for self-hosting using docker, use redis://redis:6379. For running locally, use redis://localhost:6379
    REDIS_RATE_LIMIT_URL=redis://redis:6379 
    PLAYWRIGHT_MICROSERVICE_URL=http://playwright-service:3000/html
    
    ## To turn on DB authentication, you need to set up supabase.
    USE_DB_AUTHENTICATION=false
    
    # ===== Optional ENVS ======
    
    # Supabase Setup (used to support DB authentication, advanced logging, etc.)
    SUPABASE_ANON_TOKEN= 
    SUPABASE_URL= 
    SUPABASE_SERVICE_TOKEN=
    
    # Other Optionals
    # use if you've set up authentication and want to test with a real API key
    # 这里是设置 api key 的,但是内网使用的话可以随意设置的
    TEST_API_KEY=fc-11111111
    # set if you'd like to test the scraping rate limit
    RATE_LIMIT_TEST_API_KEY_SCRAPE=
    # set if you'd like to test the crawling rate limit
    RATE_LIMIT_TEST_API_KEY_CRAWL=
    # set if you'd like to use scraping Be to handle JS blocking
    SCRAPING_BEE_API_KEY=
    # add for LLM dependednt features (image alt generation, etc.)
    OPENAI_API_KEY=
    BULL_AUTH_KEY=@
    # use if you're configuring basic logging with logtail
    LOGTAIL_KEY=
    # set if you have a llamaparse key you'd like to use to parse pdfs
    LLAMAPARSE_API_KEY=
    # set if you'd like to send slack server health status messages
    SLACK_WEBHOOK_URL=
    # set if you'd like to send posthog events like job logs
    POSTHOG_API_KEY=
    # set if you'd like to send posthog events like job logs
    POSTHOG_HOST=
    
    # set if you'd like to use the fire engine closed beta
    FIRE_ENGINE_BETA_URL=
    
    # Proxy Settings for Playwright (Alternative you can can use a proxy service like oxylabs, which rotates IPs for you on every request)
    PROXY_SERVER=
    PROXY_USERNAME=
    PROXY_PASSWORD=
    # set if you'd like to block media requests to save proxy bandwidth
    BLOCK_MEDIA=
    
    # Set this to the URL of your webhook when using the self-hosted version of FireCrawl
    SELF_HOSTED_WEBHOOK_URL=
    
    # Resend API Key for transactional emails
    RESEND_API_KEY=
    
    # LOGGING_LEVEL determines the verbosity of logs that the system will output.
    # Available levels are:
    # NONE - No logs will be output.
    # ERROR - For logging error messages that indicate a failure in a specific operation.
    # WARN - For logging potentially harmful situations that are not necessarily errors.
    # INFO - For logging informational messages that highlight the progress of the application.
    # DEBUG - For logging detailed information on the flow through the system, primarily used for debugging.
    # TRACE - For logging more detailed information than the DEBUG level.
    # Set LOGGING_LEVEL to one of the above options to control logging output.
    LOGGING_LEVEL=INFO
    
  2. docker-compose.yaml:该文件就是该 Firecrawl 的 docker 配置文件了,这里面定义了需要什么镜像和具体镜像的配置,Firecrawl 把该文件默认就放在根目录下(./firecrawl/)。

    同样的,如果没有什么特殊需求可以直接使用该文件当中的配置,如果在部署时发现与内网 IP 发生冲突或与本机的应用端口发生冲突就可以在该文件当中进行修改配置。

四、Firecrawl 构建
正式进入 Firecrawl 构建前我们可以通过国内的镜像源来下载一些依赖镜像,以提高构建的成功率。

  1. 镜像加速(如果在安装 Docker 的时候已经执行过了请忽略)

    # 新版的 Docker 使用 /etc/docker/daemon.json 来配置 Daemon
    # 请在该配置文件中加入(没有该文件的话,请先建一个)Docker 中国官方加速
    sudo vim /etc/docker/daemon.json
    

    以下为文件内容:

    {
      "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.hlmirror.com",
        "https://mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.iscas.ac.cn",
        "https://docker.rainbond.cc"
      ]
    }
    

    重启 docker 服务以应用镜像加速:

     sudo systemctl daemon-reload
     sudo systemctl restart docker
    
    • 镜像加速配置可参考:https://blog.youkuaiyun.com/awei0916/article/details/147522593
  2. 拉取依赖镜像

    docker pull python
    docker pull golang:1.24
    docker pull node:18-slim
    docker pull redis:alpine
    
  3. 构建 Firecrawl
    注意:构建命令的执行一定要在 docker-compose.yaml 文件所在目录下执行。

    # 例如,Firecrawl 在 /root/ 下
    cd /root/firecrawl/
    docker compose build
    

五、Firecrawl 运行
构建完成后使用以下命令启动 Firecrawl,注意还是要在 ./firecrawl/ 目录下:

docker compose up # 为了方便查看日志先不使用 -d 参数(后台运行)

启动完成后在浏览器输入以下 URL 来进行测试:

http://192.168.26.100:3002/test
Windows 中的 Docker

当前基于 WSL2 的加持下 Windows 下都能运行专为 Linux 开发的软件,例如 Docker。我们可以从 Docker 的官网下载 Docker Desktop 在 Windows 上使用 Docker。

安装完成后 Docker Desktop 会要求你安装 WSL2,你只需回车安装即可(千万不要自己使用微软提供的命令来安装,超级慢),同时在安装的过程中也会配置环境变量,这样你在 cmd 当中就可以使用 docker 命令了。

至此后面 Firecrawl 的安装步骤和命令都和 Ubuntu 当中的无异了。

关于 Docker 容器网络的修改

当需要把 Firecrawl 放开给内网的其他用户使用时,Firecrawl 的 Docker 容器是以 172.18.0.0/16 开始分配的,如果内网也是使用该地址的话,就会遇到 IP 冲突的问题,导致服务不可用了,这个时候就需要修改 docker-compose.yaml 的配置了。

修改网络的配置有几步:

  1. 对 docker 网络进行修改
  2. 对各个容器绑定的网络进行修改,换个说法就是让容器加入不同的网络。

Docker 网络的名称:Docker 网络的名称是由写在开头的 name 字段和写在结尾的具体网络名称结合起来决定的,像 Firecrawl 的就是 firecrawl-backend,为了方便区分,我给前半部分定义为 Docker 网络的姓,后半部分定义为 Docker 网络的名。

下面为具体的配置,标红的为修改网络时需要修改的地方:

name: firecrawl        # Docker 网络名称的姓

x-common-service: &common-service
  # NOTE: If you want to build the service locally,
  # uncomment the build: statement and comment out the image: statement
  # image: ghcr.io/mendableai/firecrawl
  build: apps/api

  ulimits:
    nofile:
      soft: 65535
      hard: 65535
  networks:
    - backend
  extra_hosts:
    - "host.docker.internal:host-gateway"

x-common-env: &common-env
  REDIS_URL: ${REDIS_URL:-redis://redis:6379}
  REDIS_RATE_LIMIT_URL: ${REDIS_URL:-redis://redis:6379}
  PLAYWRIGHT_MICROSERVICE_URL: ${PLAYWRIGHT_MICROSERVICE_URL:-http://playwright-service:3000/scrape}
  USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION}
  OPENAI_API_KEY: ${OPENAI_API_KEY}
  OPENAI_BASE_URL: ${OPENAI_BASE_URL}
  MODEL_NAME: ${MODEL_NAME}
  MODEL_EMBEDDING_NAME: ${MODEL_EMBEDDING_NAME} 
  OLLAMA_BASE_URL: ${OLLAMA_BASE_URL} 
  SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL}
  BULL_AUTH_KEY: ${BULL_AUTH_KEY}
  TEST_API_KEY: ${TEST_API_KEY}
  POSTHOG_API_KEY: ${POSTHOG_API_KEY}
  POSTHOG_HOST: ${POSTHOG_HOST}
  SUPABASE_ANON_TOKEN: ${SUPABASE_ANON_TOKEN}
  SUPABASE_URL: ${SUPABASE_URL}
  SUPABASE_SERVICE_TOKEN: ${SUPABASE_SERVICE_TOKEN}
  SCRAPING_BEE_API_KEY: ${SCRAPING_BEE_API_KEY}
  SELF_HOSTED_WEBHOOK_URL: ${SELF_HOSTED_WEBHOOK_URL}
  SERPER_API_KEY: ${SERPER_API_KEY}
  SEARCHAPI_API_KEY: ${SEARCHAPI_API_KEY}
  LOGGING_LEVEL: ${LOGGING_LEVEL}
  PROXY_SERVER: ${PROXY_SERVER}
  PROXY_USERNAME: ${PROXY_USERNAME}
  PROXY_PASSWORD: ${PROXY_PASSWORD}
  SEARXNG_ENDPOINT: ${SEARXNG_ENDPOINT}
  SEARXNG_ENGINES: ${SEARXNG_ENGINES}
  SEARXNG_CATEGORIES: ${SEARXNG_CATEGORIES}

services:
  playwright-service:
    build: apps/playwright-service-ts
    environment:
      PORT: 3000
      PROXY_SERVER: ${PROXY_SERVER}
      PROXY_USERNAME: ${PROXY_USERNAME}
      PROXY_PASSWORD: ${PROXY_PASSWORD}
      BLOCK_MEDIA: ${BLOCK_MEDIA}
    networks:
      - backend

  api:
    <<: *common-service
    environment:
      <<: *common-env
      HOST: "0.0.0.0"
      PORT: ${INTERNAL_PORT:-3002}
      FLY_PROCESS_GROUP: app
    depends_on:
      - redis
      - playwright-service
    ports:
      - "${PORT:-3002}:${INTERNAL_PORT:-3002}"
    command: [ "pnpm", "run", "start:production" ]

  worker:
    <<: *common-service
    environment:
      <<: *common-env
      FLY_PROCESS_GROUP: worker
    depends_on:
      - redis
      - playwright-service
      - api
    command: [ "pnpm", "run", "workers" ]

  redis:
    # NOTE: If you want to use Valkey (open source) instead of Redis (source available),
    # uncomment the Valkey statement and comment out the Redis statement.
    # Using Valkey with Firecrawl is untested and not guaranteed to work. Use with caution.
    image: redis:alpine
    # image: valkey/valkey:alpine

    networks:
      - backend
    command: redis-server --bind 0.0.0.0

networks:
  backend:        # Docker 网络名称的名
    driver: bridge
    ipam:
      config:
        - subnet: 169.254.20.0/24
          gateway: 169.254.20.1

修改完成后我们执行以下命令来刷新一下 Docker 中容器的网络配置:

cd /root/firecrawl/
docker compose down    # 一定要用 down,如果只用 stop 网络还是会存在的,而 down 会删除网络后重建,这就会重新读取配置文件了
docker compose up -d    # 启动完成后,后台执行

使用以下命令查看网络是否成功刷新:

docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
60543a4ce104   bridge              bridge    local
97500e5d8d29   firecrawl_backend   bridge    local
b094cb4ca2cb   host                host      local
78eef628113c   none                null      local

docker network inspect 60543a4ce104
[
    {
        "Name": "bridge",
        "Id": "60543a4ce1049cef67a86c4a401d00772f258c2909bc65be28326f355d67f6a8",
        "Created": "2025-05-13T05:37:26.685071552-04:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

备份与加载 Firecrawl 的镜像

Docker 镜像的构建和拉去在国内的网络环境下是有一定难度的,这样无疑大大降低了容器的便捷性,而我们如果想要多在几台不同的机器上部署 Firecrawl 是不是每次都要重新构建呢?其实并不需要,我们只需要先在一台机器上进行搭建,然后备份相应的镜像,最后再拷贝到需要部署的机器上把镜像进行加载就可以快速的部署,备份和加载的过程如下。

一、备份 Firecrawl 的镜像

  1. Firecrawl 需要备份的镜像有:firecrawl-apifirecrawl-workerfirecrawl-playwright-serviceredis,我们可以使用以下命令来查看:
docker image ls
REPOSITORY                     TAG       IMAGE ID       CREATED        SIZE
firecrawl-worker               latest    1162031cf0fa   18 hours ago   870MB
firecrawl-api                  latest    01bb699700f6   18 hours ago   870MB
firecrawl-playwright-service   latest    519ef502e368   43 hours ago   2.5GB
python                         latest    e20207435136   5 days ago     1.02GB
golang                         1.24      f254902cf370   7 days ago     853MB
rust                           1-slim    597f2b7f9f59   8 days ago     847MB
redis                          alpine    67ae465a4123   9 days ago     60.5MB
node                           22-slim   ef55d7d36951   2 weeks ago    224MB
node                           18-slim   fc665eaf5031   6 weeks ago    192MB

  1. 使用下面的命令来进行备份:
    docker save -o /root/firecrawl_images/firecrawl-worker.tar firecrawl-worker
    docker save -o /root/firecrawl_images/firecrawl-api.tar firecrawl-api
    docker save -o /root/firecrawl_images/firecrawl-playwright-service.tar firecrawl-playwright-service
    docker save -o /root/firecrawl_images/redis.tar redis
    

二、加载 Firecrawl 的镜像
将备份的镜像拷贝到需要部署的机器之后使用以下命令进行镜像的载入:

# 假设镜像存储的路径为 /root/firecrawl_images/
docker load -i /root/firecrawl_images/firecrawl-worker.tar firecrawl-worker
docker load -i /root/firecrawl_images/firecrawl-api.tar firecrawl-api
docker load -i /root/firecrawl_images/firecrawl-playwright-service.tar firecrawl-playwright-service
docker load -i /root/firecrawl_images/redis.tar redis

加载完成后可以使用以下命令查看是否加载成功:

docker image ls

当然也是需要重新下载源码以及修改环境变量和配置文件的,请重复前面 Firecrawl 安装的第三步,在一切处理完成后就可以使用以下命令来启动了:

# 假设下载源代码的路径为 /root/firecrawl/
cd /root/firecrawl/
docker compose up -d
Dify 的调用
  1. 在部署好的 Dify(v1.0.0)当中安装 Firecrawl 插件
    在这里插入图片描述

  2. 单击插件配置页面进行授权配置
    在这里插入图片描述

  3. 点击保存成功授权
    在这里插入图片描述

  4. 测试
    测试网址:https://baijiahao.baidu.com/s?id=1831912111607933623
    在这里插入图片描述

流程如下:
在这里插入图片描述

测试结果如下:

在这里插入图片描述

注意

  • 确保 Firecrawl 和 Dify 服务均已正确启动。
  • 在 Dify 中配置 Firecrawl 插件时,需填写正确的 API URL 和 API Key(在 Firecrawl 的 .env 文件中设置的 TEST_API_KEY)。
  • 测试时可根据实际需求调整抓取深度、格式等参数。

通过以上步骤,您可以成功部署 Firecrawl 并实现与 Dify 的集成调用,确保数据抓取和 LLM 应用的无缝衔接。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

Dify平台中,使用爬虫工具进行数据采集是一个结合自动化流程与API接口调用的过程。通过与外部工具(如Browser-use)的协作,Dify能够实现动态数据抓取、清洗、分类以及后续指令生成的完整流程。 数据采集的第一步是抓取动态网页内容,特别是那些由JavaScript渲染的页面(如电商网站)。通过Browser-use工具,可以模拟浏览器行为,获取页面的完整渲染结果,从而获取完整的HTML内容。这一过程能够突破传统爬虫对静态HTML的依赖,实现对复杂前端渲染内容的抓取[^1]。 获取到原始数据后,下一步是将这些数据输入到Dify平台中进行处理。Dify支持对爬取的数据进行清洗、分类以及关键词提取等操作。这些处理可以通过平台内置的流程规则进行配置,也可以结合AI模型实现更智能的分类和分析。例如,Dify可以自动识别文本的主题、提取关键信息,并根据预设规则将数据分门别类[^1]。 完成数据清洗和分类后,Dify可以根据当前抓取结果生成下一步的爬取指令。例如,根据电商页面的结构,Dify可以动态生成翻页指令或切换筛选条件的指令,指导Browser-use继续抓取更多相关数据。这种基于AI的动态指令生成机制,使得爬虫流程更加智能化,能够适应不同网站结构的变化[^1]。 最后,所有采集和处理后的数据可以通过Dify的API接口写入知识库中。例如,可以使用如下`curl`命令将文本数据上传到指定的知识库集合中: ```bash curl --location --request POST 'http://192.168.51.101/v1/datasets/{dataset_id}/document/create-by-text' \ --header 'Authorization: Bearer {api_key}' \ --header 'Content-Type: application/json' \ --data-raw '{"name": "text","text": "text","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}' ``` 该接口支持自动化的数据索引和存储,确保爬取的数据能够被高效检索和利用[^2]。 综上所述,Dify平台通过与Browser-use等工具的集成,实现了从动态网页抓取、数据清洗与分类、AI驱动的爬取策略调整,到最终数据写入知识库的全流程自动化处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

awei0916

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值