欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取

Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取

2025/3/11 1:36:48 来源:https://blog.csdn.net/2301_78453609/article/details/146026309  浏览:    关键词:Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取

Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取

在当今人工智能时代,网络爬虫扮演着至关重要的角色。它们不仅是数据收集的强大工具,更是驱动机器学习、自然语言处理等技术发展的关键引擎。

然而,对于用户来说,在面对复杂多变的网络环境和各异的网站结构时,常常会遇到诸多挑战。爬取中文网站时,编码问题、反爬机制、以及对中文语义的理解都成为了阻碍数据获取的绊脚石。

正是在这样的背景下,我发现了 Crawl4AI,一款专为大型语言模型(LLM)和人工智能应用设计的高效、灵活且完全开源的网页爬虫与数据提取工具。

它致力于降低用户在数据获取方面的门槛,赋能开发者以快速、高效、便捷的方式从网络中提取所需信息。

概览

Crawl4AI 是一款功能丰富、且对 LLM 非常友好的爬虫框架。它拥有以下核心优势:

  • 完全开源且免费:Crawl4AI 采用 Apache 2.0 协议,允许用户自由使用、修改和分发,无需担心付费或商业限制。
  • 专为 AI 设计:自动将网页内容转换为结构清晰、简洁的 Markdown 格式,极大地简化了 RAG(检索增强生成)流程和微调任务的数据获取步骤。
  • 速度快,效率高:Crawl4AI 拥有出色的性能,能够在短时间内抓取大量页面,并通过启发式算法降低对昂贵模型的依赖。
  • 高度灵活可配置:支持多种配置选项,包括自定义 User-Agent、代理设置、会话管理等,轻松应对各种反爬策略。

核心优势

Crawl4AI 的强大之处体现在以下几个核心方面:

  1. 速度与效率
    Crawl4AI 追求极致性能,凭借其架构优化,能以极快的速度抓取网页。与同类工具相比,Crawl4AI 在速度上具有显著优势。

  2. 灵活的配置

    Crawl4AI 提供了两个核心配置类,BrowserConfig​ 和 CrawlerRunConfig​,方便用户灵活地定制爬虫的行为:

    • BrowserConfig​:用于配置浏览器级别的设置,例如是否启用无头模式、设置 User-Agent、配置代理等。
    • CrawlerRunConfig​:用于配置单次抓取任务的行为,例如缓存模式、内容选择、内容过滤、JavaScript 执行等。
  3. 多结构数据提取

    Crawl4AI 支持多种数据提取策略,能够从网页中提取出结构化的信息:

    • JSON CSS Extraction:使用 CSS 选择器从结构化的网页中提取数据,速度快、效率高。
    • JSON XPath Extraction:使用 XPath 表达式从 XML 或 HTML 文档中提取数据,更加灵活。
    • LLM Extraction:结合大型语言模型,从非结构化的网页中提取信息,适用于处理复杂或语义化的内容。
  4. 可扩展的大规模数据处理能力
    Crawl4AI 通过内存自适应调度器(MemoryAdaptiveDispatcher​)来支持大规模并发爬取,可以根据系统内存使用情况动态地调整并发任务数量,防止内存溢出,保证爬虫的稳定运行。同时还提供了流式处理的支持,能够在抓取的同时处理数据,无需等待所有任务完成,大大提高了效率。

  5. 协议支持
    Crawl4AI 默认支持 HTTP(S) 协议,但同时也考虑到网络爬虫的伦理和法律问题,提供了 robots.txt​ 协议的支持,可以通过设置 check_robots_txt=True​ 来遵守网站的爬取规则,避免对网站造成不必要的负担。

快速上手

以下是使用 Crawl4AI 的快速上手指南:

1. 安装

使用 pip 安装 Crawl4AI:

pip install crawl4ai
crawl4ai-setup
2. 编写 Python 脚本

创建一个 Python 脚本,例如 crawl.py​,并添加以下代码:

import asyncio
from crawl4ai import AsyncWebCrawlerasync def main():async with AsyncWebCrawler() as crawler:result = await crawler.arun(url="https://www.example.com")print(result.markdown[:500])if __name__ == "__main__":asyncio.run(main())
3. 运行脚本

在命令行中运行该脚本:

python crawl.py
4. 使用命令行界面(CLI)

如果你只需要快速的抓取一个网页,可以使用我们提供的CLI工具:

crwl https://www.nbcnews.com/business -o markdown

高级功能

Crawl4AI 提供了许多高级功能,可以满足各种复杂的爬取需求。

1. 高级的网页遍历方法:深度爬取

Crawl4AI 支持深度爬取,可以通过配置 deep_crawl_strategy​ 参数来控制爬取的深度和范围。目前支持三种深度爬取策略:

  • BFSDeepCrawlStrategy​(广度优先搜索):逐层遍历网页。
  • DFSDeepCrawlStrategy​(深度优先搜索):沿着一条路径深入挖掘,直到无法再深入为止。
  • BestFirstCrawlingStrategy​:基于评分函数来决定下一个要爬取的链接,优先爬取最有价值的页面。
2. 代理与安全

你可以通过 BrowserConfig​ 中的 proxy​ 或 proxy_config​ 参数来配置代理,实现 IP 轮换和匿名爬取。

browser_config = BrowserConfig(proxy_config={"server": "http://proxy.example.com:8080","username": "user","password": "pass",}
)
3. 会话管理

通过设置 CrawlerRunConfig​ 中的 session_id​ 参数,可以在多次请求之间保持会话状态,例如模拟用户登录后的操作。

run_config = CrawlerRunConfig(session_id="my_session"
)
4. 浏览器配置与用户代理

你可以通过 BrowserConfig​ 中的 user_agent​ 参数来设置自定义的用户代理,或者使用 user_agent_mode​ 参数来随机生成用户代理,以模拟真实用户的行为,避免被网站的反爬机制识别。

browser_config = BrowserConfig(user_agent_mode="random",user_agent_generator_config={"device_type": "mobile", "os_type": "android"},
)
5. LLM配置

Crawl4AI现在提供 LlmConfig​ 对象,用于配置 LLM 提供程序。这简化了在需要 LLM 的策略和函数中传递provider字符串、API 令牌和基本 URL 的过程,从而可以重复使用并快速试验不同的 LLM 配置。
您可以通过以下两种方式传递LLM密钥:

a)在本地设置环境变量并在 LlmConfig 对象内部调用它

os.environ["OPENAI_API_KEY"] = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"llm_config = LlmConfig(provider="openai/gpt-4", api_token=os.getenv("OPENAI_API_KEY"))

b)将 api_token 直接传递给 LlmConfig 对象:

llm_config = LlmConfig(provider="openai/gpt-4", api_token="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
6. 结构化数据提取

Crawl4AI 支持多种结构化数据提取方式,包括:

  • JSON CSS Extraction:使用 CSS 选择器从 HTML 页面中提取数据。
  • JSON XPath Extraction:使用 XPath 表达式从 HTML 页面中提取数据。
  • LLM Extraction:使用大型语言模型从非结构化的文本中提取数据。
7. 内容过滤

Crawl4AI 提供了多种内容过滤策略,可以根据关键词、BM25 算法或大型语言模型来过滤网页内容,提取出最相关的信息。例如,使用 BM25ContentFilter​ 可以根据用户查询来过滤网页内容:

from crawl4ai.content_filter_strategy import BM25ContentFilterfilter = BM25ContentFilter(user_query="machine learning")

应用场景

Crawl4AI 在实际应用中拥有广泛的应用场景:

  1. 研究助手:用于快速抓取和整理学术论文、研究报告等信息,辅助科研人员进行文献综述和数据分析。
  2. 数据分析:用于抓取电商网站的商品信息、社交媒体的用户数据等,为商业决策提供数据支持。
  3. AI 模型训练:用于构建高质量的训练数据集,提升 AI 模型的性能。
  4. 新闻聚合:定时抓取多个新闻网站的内容,生成个性化的新闻摘要或报告。

提问环节:

请具体说明一下该项目的数据缓存和多网页爬取?

1. 数据缓存

数据缓存是 Crawl4AI 的一项重要特性,它可以将抓取到的网页内容保存在本地,下次再次请求相同页面时,直接从缓存中读取,而无需重新发起网络请求。这极大地提高了爬取效率,并降低了对目标网站的访问压力。

1.1 缓存模式

Crawl4AI 使用 CacheMode​ 枚举类型来控制缓存行为。你可以在 CrawlerRunConfig​ 中指定缓存模式:

from crawl4ai import CrawlerRunConfig, CacheModeconfig = CrawlerRunConfig(cache_mode=CacheMode.ENABLED)  # 启用缓存(默认)

以下是 CacheMode​ 的各个选项:

  • CacheMode.ENABLED​: 默认模式,先尝试从缓存读取数据,如果缓存不存在,则发起网络请求,并将结果写入缓存。
  • CacheMode.DISABLED​: 禁用所有缓存功能,每次都发起网络请求。
  • CacheMode.READ_ONLY​: 只从缓存读取数据,不写入新数据到缓存。
  • CacheMode.WRITE_ONLY​: 只将数据写入缓存,不从缓存读取数据。
  • CacheMode.BYPASS​: 绕过缓存,直接发起网络请求,并将结果写入缓存。
1.2 清理缓存

Crawl4AI 提供了 aclear_cache()​ 和 aflush_cache()​ 两个方法来管理缓存:

  • aclear_cache()​:清空数据库中的所有缓存数据,但保留数据库文件。

    async with AsyncWebCrawler() as crawler:await crawler.aclear_cache()
    
  • aflush_cache()​:直接删除数据库文件,下次使用时会重新创建数据库。

    async with AsyncWebCrawler() as crawler:await crawler.aflush_cache()
    

2. 多网页爬取

Crawl4AI 提供了 arun_many()​ 方法,可以同时抓取多个网页,大幅提升爬取效率。同时,Crawl4AI 通过调度器(Dispatcher)来控制并发数量,避免对目标网站造成过大的压力。

2.1 使用 arun_many()​ 方法
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfigasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]async with AsyncWebCrawler() as crawler:results = await crawler.arun_many(urls=urls)  # 自动处理并发for result in results:if result.success:print(f"成功抓取:{result.url}")else:print(f"抓取失败:{result.url},错误信息:{result.error_message}")if __name__ == "__main__":asyncio.run(main())
2.2 调度器(Dispatcher)

Crawl4AI 使用调度器来管理并发任务,主要有两种调度器:

  • MemoryAdaptiveDispatcher​:根据系统内存使用情况动态调整并发数量,避免内存溢出。

    from crawl4ai import MemoryAdaptiveDispatcherdispatcher = MemoryAdaptiveDispatcher(memory_threshold_percent=80)
    
    • memory_threshold_percent​:内存使用阈值,当内存使用超过该值时,调度器会暂停任务。
    • max_session_permit​:允许的最大并发任务数。
    • check_interval​:检查内存使用情况的间隔时间(秒)。
  • SemaphoreDispatcher​:使用信号量来控制并发数量,简单直接。

    from crawl4ai import SemaphoreDispatcherdispatcher = SemaphoreDispatcher(semaphore_count=5)
    
    • semaphore_count​:允许的最大并发任务数。
2.3 使用示例:内存自适应调度器
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, MemoryAdaptiveDispatcherasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]dispatcher = MemoryAdaptiveDispatcher(memory_threshold_percent=80)async with AsyncWebCrawler() as crawler:results = await crawler.arun_many(urls=urls, config=CrawlerRunConfig(), dispatcher=dispatcher)for result in results:if result.success:print(f"Successfully crawled: {result.url}")else:print(f"Failed to crawl: {result.url}")if __name__ == "__main__":asyncio.run(main())
2.4 流式处理(Streaming)

arun_many()​ 也支持流式处理,可以在抓取的同时处理数据,无需等待所有任务完成。

import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfigasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]config = CrawlerRunConfig(stream=True)  # 开启流式处理async with AsyncWebCrawler() as crawler:async for result in crawler.arun_many(urls=urls, config=config):if result.success:print(f"Successfully crawled: {result.url}")else:print(f"Failed to crawl: {result.url}")if __name__ == "__main__":asyncio.run(main())
2.5 总结

这个项目的维护和更新也是比较频繁,社区活跃度还是比较高,目前不用担心不能使用的问题。

这也是我的日常获取信息的工具,推荐有条件的朋友可以用用看。

项目地址:

Crawl4ai

点个关注,不麋鹿!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词