当下企业竞相将海量在线数据转化为LLM(大型语言模型)友好的格式,以驱动业务增长和创新。Web抓取和数据提取已成为这一过程中不可或缺的工具。
Firecrawl作为一款强大的Web抓取API,以其企业级自动化和可扩展性特性,极大地简化了这一流程。今天我们一起来了解一下Firecrawl。
一、Web抓取与Web爬取的区别
在了解Firecrawl如何工作之前,有必要先明确Web抓取(Web Scraping)与Web爬取(Web Crawling)的区别。Web抓取指的是从单个网页中提取特定数据,如一篇维基百科文章或技术教程的内容。这通常在你需要从具有已知URL的页面中获取具体信息时使用。
相比之下,Web爬取则涉及系统地浏览和发现网页,通过跟踪链接来实现。它侧重于网站导航和URL发现。例如,如果你想构建一个能够回答关于Stripe文档问题的聊天机器人,你需要:
- 使用Web爬取来发现和遍历Stripe文档网站的所有页面;
- 使用Web抓取来提取每个发现页面的实际内容。
Firecrawl的/crawl端点巧妙地将这两种能力结合在一起,使其成为一个功能强大的工具。
二、Firecrawl的工作原理
Firecrawl 的 /crawl 端点巧妙地结合了抓取和爬取的功能:
1、URL 分析
能够通过网站地图或页面遍历识别链接,为后续的爬取提供基础。例如,当输入一个电商网站的 URL 时,Firecrawl 可以分析其网站地图,找出所有相关商品分类页面、详情页面等的链接。
2、递归遍历
可以自动跟踪链接,发现子页面,实现对整个网站的深度遍历。以一个新闻网站为例,它可以从首页开始,沿着新闻分类链接、文章详情链接等,逐步深入到网站的各个角落,抓取所有相关页面。
3、内容抓取
从每个页面提取干净、结构化的内容,无论是文本、图片还是其他媒体信息。比如,在抓取一篇新闻文章时,它可以准确地提取标题、正文、发布时间等关键信息,并将其整理成适合后续处理的格式。
4、结果编译
将抓取和爬取到的所有信息转换为结构化数据,如 JSON 格式,方便与其他系统集成或供 LLM 使用。这种结构化的数据可以轻松地被导入数据库或直接作为 LLM 的输入。
三、使用Firecrawl进行Web爬取的步骤
使用Firecrawl的API进行Web爬取相对简单。以下是一个使用Python SDK的逐步指南:
-
注册并获取API密钥:首先,你需要在Firecrawl网站上注册一个账户,并获取你的API密钥。
-
设置环境变量:你可以使用dot-env文件来存储你的API密钥,以便在代码中安全地使用它。
-
安装并导入Firecrawl库:使用pip安装Firecrawl的Python SDK,并在你的Python脚本中导入它。
-
建立与Firecrawl API的连接:使用你的API密钥创建一个FirecrawlApp实例,该实例将用于与Firecrawl API引擎建立连接。
-
执行抓取操作:使用crawl_url方法传递你想要抓取的网站的URL。这个方法将返回一个包含抓取结果的字典。
-
处理抓取结果:你可以遍历抓取结果中的数据列表,并访问每个页面的内容(如markdown格式的内容)和元数据。
四、Firecrawl高级配置选项
Firecrawl提供了多种参数来配置抓取过程,以满足不同场景的需求。以下是一些关键配置最佳实践:
(一)抓取选项(Scrape Options)
1、内容保存格式
Firecrawl 允许用户选择多种内容保存格式,其中 Markdown 是默认格式,还支持 HTML、Raw HTML(整个网页的简单复制粘贴)、Links(页面中的链接列表)和 Screenshot(页面截图,其值为临时链接,有效期为 24 小时)。例如,以下代码可以以多种格式抓取 Stripe API 文档的前 5 页:
# Crawl the first 5 pages of the stripe API documentation
stripe_crawl_result = app.crawl_url(
url="https://docs.stripe.com/api",
params={
"limit": 5, # Only scrape the first 5 pages including the base-url
"scrapeOptions": {
"formats": ["markdown", "html", "links", "screenshot"]
}
}
)
2、控制抓取内容范围
通过onlyMainContent参数(默认禁用),可以排除导航、页眉和页脚等内容,仅抓取主要内容。例如:
stripe_crawl_result = app.crawl_url(
url="https://docs.stripe.com/api",
params={
"limit": 5,
"scrapeOptions": {
"formats": ["markdown", "html"],
"onlyMainContent": True,
},
},
)
同时,includeTags和excludeTags参数接受 HTML 标签、类和 ID 的白名单 / 黑名单列表,进一步精确控制抓取的元素。例如:
# Crawl the first 5 pages of the stripe API documentation
stripe_crawl_result = app.crawl_url(
url="https://docs.stripe.com/api",
params={
"limit": 5,
"scrapeOptions": {
"formats": ["markdown", "html"],
"includeTags": ["code", "#page-header"],
"excludeTags": ["h1", "h2", ".main-content"],
},
},
)
(二)URL 控制(URL Control)
1、指定 URL 模式
includePaths参数可用于指定要包含的特定 URL 路径,excludePaths参数用于排除不需要的内容路径。例如,在抓取 Stripe 文档网站时,可以只抓取/payments/*路径下的页面,并排除/terminal/*和/financial - connections/*部分
2、处理链接关系
allowBackwardLinks参数用于控制是否允许爬取指向已访问页面的链接,allowExternalLinks参数用于管理外部链接的处理。例如:
# Example of URL control parameters
url_control_result = app.crawl_url(
url="https://docs.stripe.com/",
params={
# Only crawl pages under the /payments path
"includePaths": ["/payments/*"],
# Skip the terminal and financial-connections sections
"excludePaths": ["/terminal/*", "/financial-connections/*"],
# Allow crawling links that point to already visited pages
"allowBackwardLinks": False,
# Don't follow links to external domains
"allowExternalLinks": False,
"scrapeOptions": {
"formats": ["html"]
}
}
)
# Print the total number of pages crawled
print(f"Total pages crawled: {url_control_result['total']}")
此外,maxDepth参数可以限制爬取的深度,例如设置为 2 时,将只抓取初始页面及其直接链接的页面。
(三)性能与限制(Performance & Limits)
1、控制抓取范围
limit参数用于设置最大抓取页面数,这对于避免在抓取大型网站时消耗过多资源至关重要。例如,在抓取大型电商网站时,可以设置limit为 1000,以限制抓取的页面数量。
2、确保页面完全加载
对于包含动态内容(如 JavaScript 处理的内容)、iFrames 或大型媒体元素的网站,可以使用waitFor参数设置等待时间,让页面有足够时间加载。同时,timeout参数可以确保在页面加载时间过长时,爬虫能够继续执行而不被卡住。例如:
stripe_crawl_result = app.crawl_url(
url="https://docs.stripe.com/api",
params={
"limit": 5,
"scrapeOptions": {
"formats": ["markdown", "html"],
"waitFor": 1000, # wait for a second for pages to load
"timeout": 10000, # timeout after 10 seconds
},
},
)
五、Firecrawl 和 LangChain 集成构建 AI 驱动的 Web 爬虫
首先安装 LangChain 及其相关库:
pip install langchain langchain_community langchain_anthropic langchain_openai
导入 FireCrawlLoader 类并对其进行初始化(将 ANTHROPIC_API_KEY 和 OPENAI_API_KEY 作为变量添加到 .env 文件中):
from dotenv import load_dotenv
from langchain_community.document_loaders.firecrawl import FireCrawlLoader
load_dotenv()
loader = FireCrawlLoader(
url="https://python.langchain.com/docs/integrations/providers/",
mode="crawl",
params={"limit": 5, "scrapeOptions": {"onlyMainContent": True}},
)
开始爬取
# Start the crawl
docs = loader.load()
下一步进行切块
from langchain_text_splitters import RecursiveCharacterTextSplitter
# Add text splitting before creating the vector store
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
# Split the documents
split_docs = text_splitter.split_documents(docs)
向量存储
from langchain_chroma import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain_community.vectorstores.utils import filter_complex_metadata
# Create embeddings for the documents
embeddings = OpenAIEmbeddings()
# Create a vector store from the loaded documents
docs = filter_complex_metadata(docs)
vector_store = Chroma.from_documents(docs, embeddings)
最后一步是使用 Claude 3.5 Sonnet 作为语言模型构建 QA 链:
from langchain.chains import RetrievalQA
from langchain_anthropic import ChatAnthropic
# Initialize the language model
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620", streaming=True)
# Create a QA chain
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vector_store.as_retriever(),
)
现在,我们可以询问有关我们文件的问题:
# Example question
query = "What is the main topic of the website?"
answer = qa_chain.invoke(query)
print(answer)
{
'query': 'What is the main topic of the website?',
'result': """The main topic of the website is LangChain's integrations with Hugging Face.
The page provides an overview of various LangChain components that can be used with
Hugging Face models and services, including:
1. Chat models
2. LLMs (Language Models)
3. Embedding models
4. Document loaders
5. Tools
The page focuses on showing how to use different Hugging Face functionalities within
the LangChain framework, such as embedding models, language models, datasets, and
other tools."""
}
Firecrawl是一款功能强大的Web抓取工具,它结合了Web抓取和Web爬取的能力,能够高效地抓取整个网站并为LLM提供丰富、结构化的数据。通过合理配置和使用最佳实践,可以帮助大家构建高效、可扩展的Web抓取解决方案。
六、如何系统学习掌握AI大模型?
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源
,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享
!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 2024行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码
,免费领取【保证100%免费
】