GITHUB每日最佳:大模子期间的爬虫框架——Firecrawl(2024-09-08) ...

打印 上一主题 下一主题

主题 893|帖子 893|积分 2679

原创 | Char
公众号 | IT武库     
       爬虫一直是获取数据的重要方法,而以数据作为驱动的大模子技能,一方面临爬虫技能提出了更多要求,一方面也促进了爬虫技能的发展。Firecrawl就是一个在这样的配景下,诞生的开源爬虫项目。

        Firecrawl可以将整个网站转换为能直接作为 LLM 练习语料的 markdown 或布局化数据,具有强大的抓取、爬取和数据提取本领。用户可以通过 API 利用它,包罗利用 Crawling 功能爬取 URL 及全部可访问的子页面,利用 Scraping 功能抓取 URL 并获取指定格式的内容,利用 Map 功能获取网站的 URL,利用 LLM Extraction 功能从抓取的页面中提取布局化数据等。此外,它还提供了 Python SDK 和 Node SDK,方便开发者在不同语言中利用。该项目仍处于早期开发阶段,部分功能大概尚未完全准备好,但可以在当地运行。在利用时,用户需要遵守网站的政策和适用的隐私政策及利用条款,默认情况下 Firecrawl 会尊重网站的 robots.txt 文件中的指令。该项目主要遵照 AGPL - 3.0 允许证,部分组件遵照 MIT 允许证。
        Firecrawl提供了一个线上运行环境:Playground - Firecrawl,笔者在这里尝试爬取了CSDN的首页。由于需要注册账号才能爬取全部页面,这次实验只爬取了首页和首页上的4个子页面。以下是本次爬取效果:

CSDN站点首页

获取导航栏文本


获取头条新闻


获取页面外链


获取网页元数据


同时给出了4个子页面的爬取数据

        这个效果笔者认为是比力可圈可点的,除开作为项目主打的为LLM提供语料知识这个场景,还能用来做很多事变:比如站点分析与治理、互联网舆情分析、商品分析等任务场景中均可应用。但凡在需要爬虫的场合,Firecrawl都有广阔的用武之地。


        说完效果和应用,我们来看看项目本身实现。Firecrawl现在已为JavaScript、Python、Rust语言提供SDK,用户可以通过SDK快速地调用Firecrawl的云端服务。不外通过这种方式调用,需要首先在官网注册账号并且取得API key。Github仓库的代码中还提供了一个用React编写的UI界面。不外从代码上看,利用这个UI发送的请求也是调用云端服务,同样需要API key。


SDK初始化类,要求Firecrawl API key


UI界面中的请求目的还是云端服务

        这样的开源项目着实比力类似AWS等云服务厂商,将自己产物的API调用封装成SDK,发布在开源站点供用户下载,以方便用户利用自家产物。推测Firecrawl的运营有按照这个方向孵化的打算。

        不外,Firecrawl开源项目的代码中现在还是包含了爬虫逻辑的源码。在本开源项目目录中,除了上文提到的3个SDK以及对Playwright(一个自动化框架,也可以用作爬虫框架)调用的封装外,www目录现在没有内容,test-suite包含一些测试用例与数据,redis目录放置一些redis操作脚本(redis在项目中主要用于设置任务队列,以支持对站点子页面内容的爬取),而api目录放置Firecrawl爬虫的源码。


项目目录

        Firecrawl的后台源码利用typescript编写,通过node运行。从源码来看,Firecrawl对单个url的爬取逻辑大抵如下:

1、尝试对爬取目标url利用指定的抓取工具获取其html。代码中支持四种爬虫框架:Fetch、ScrapingBee、PlayWright,此外另有Firecrawl自己实现的FireEngine。不外除了Fetch方式之外,利用其他三种方式都需要提供API key,代码中也仅仅能看到给这些API发送请求,并无具体实现,故我们从Fetch方式的路径开始分析;

2、对目标url发送get请求,获取html;

3、判定有无pdf,如有则用pdf-parse库分析并生成pdf笔墨择要;
4、清理不必要的元素;
5、调用处理markdown函数;

2-5步的外层调用

6、提取html中的全部超链接;
7、将html转化为markdown有几种实现,其中一种是利用go parser动态链接库go-html-to-md/html-to-markdown.so中,无法瞥见具体逻辑;

Html转markdown由这个so文件实现

        另一种是利用turndown库,由用户选择大概前者失败后启用;

用户不选择go parser或go parser失败则调用turndown

        关于站点、子链接的爬取本文不再赘述。通过对首页url html中全部子链接的分析,辅以任务调理和管理代码可以比力容易地进行实现。
        代码里另有个比力故意思的点,项目作者积极地试图将LLM应用到这个项目中,究竟上,在处理PDF的部分,作者确实利用了LLM。不外,项目中有一个函数,是通过大模子对图片进行形貌,生成图片的笔墨择要用来代替图片以节流markdown的体积

        不外这个函数最外层的调用被注释掉了。是由于LLM读图的效果不稳定还是性能问题?

        另外,有一部分代码和测试用例中呈现了用户利用大模子对markdown进行问答的功能。这块本领在官方的playground上没有体现,严格来说也不属于爬虫部分的本领。


        联合官方文档,这部分代码应该是Firecrawl作为插件集成进如Dify、Langflow等其他LLM产物时利用的。


        Firecrawl是一个积极拥抱大模子技能的爬虫开源项目。从爬虫的角度看,它整合了其他的一些爬虫框架和各类工具库,并在许多地方进行了冗余实现,以防单个工具无法兼容目标站点,有很强的体系鲁棒性,且集成度比力高,但其输出格式过于固定,也导致其和其他一些传统的爬虫框架相比,缺少定制化本领从而难以满足一些正确爬取的需求。然而从大模子的角度来看,Firecrawl很好地适配了当前的大模子环境,能够作为插件为大模子提供互联网上各类站点的全量信息,使得大模子在回答用户问题时能够对网页进行全面地了解,这点具有十分重要的意义。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表