Type something to search...
Crawl4AI:释放高效网络抓取功能

Crawl4AI:释放高效网络抓取功能

在当今数据驱动的世界中,高效收集和处理信息的能力对于人工智能(AI)应用的成功至关重要。随着人工智能的不断发展,对结构化数据以训练大型语言模型(LLMs)的需求前所未有地高。

引入 Crawl4AI,一个创新的开源 Python 库,旨在简化网页爬取和数据提取,使其成为开发者和人工智能爱好者不可或缺的工具。本文将探讨 Crawl4AI 的功能、特性和使用案例,强调它如何使用户能够利用网络的力量进行人工智能训练。

什么是 Crawl4AI?

Crawl4AI 是一个开源的网页爬虫和抓取框架,旨在自动化从网站收集数据的过程。它允许用户同时抓取多个 URL,成为需要大规模数据收集的项目的理想选择。Crawl4AI 具备为 AI 应用量身定制的功能,简化了将原始网页数据转换为结构化格式的过程。

Crawl4AI的关键特性:

🆓 开源其开源特性确保用户可以完全访问代码,允许进行定制和扩展。此外,强大的社区支持和丰富的文档使新用户更容易入门。

🚀 闪电般的性能Crawl4AI的一个突出特点是其卓越的速度。该框架经过优化,可以超越许多付费服务,使用户能够快速高效地提取数据。

🌐 异步架构支持同时爬取多个URL,显著减少大规模数据收集所需的时间。

🤖 LLM友好的输出格式支持多种输出格式,包括JSON、清理后的HTML和Markdown,确保与AI模型的轻松集成。

🎨 提取并返回所有媒体标签使用Crawl4AI,用户可以提取各种媒体类型,包括图像、音频和视频。此功能对依赖多媒体内容的应用程序特别有益,例如社交媒体分析或内容创作。

📜 JavaScript执行允许抓取动态内容,确保全面的数据收集,其他抓取工具可能会遗漏。

📚 多种分块策略Crawl4AI支持多种分块策略,如基于主题、正则表达式和基于句子的分块。这种灵活性使用户能够根据特定要求定制数据提取,确保在多种应用中获得最佳结果。

🧠 高级提取技术利用XPath和正则表达式等强大方法,使用户能够精确定位所需的数据。

📚 元数据提取在主内容旁收集必要的元数据,丰富AI训练的数据集。

🕵️ 自定义钩子和用户代理支持用户可以定义自定义钩子用于身份验证和头信息,并可以自定义HTTP请求的用户代理,从而提供更大的爬取过程控制。

🔄 错误处理和重试机制集成了强大的错误处理和重试策略,确保在遇到网络问题或页面加载失败时数据的完整性。

🔒 速率限制和节流帮助避免对目标服务器造成过大压力,并确保遵守网络抓取最佳实践。

开始使用 Crawl4AI:

Crawl4AI 不仅仅是一个网络爬虫工具;它是一个全面的解决方案,专为满足开发人员和数据分析师的需求而设计,提供先进的异步网络爬取和数据提取功能。

现在,我们将深入探讨 Crawl4AI 的一些核心功能和特性,并展示代码示例,以说明如何实现这些功能以优化网络数据提取。

💻 安装

有几种选项可以安装 Crawl4AI — 您可以将其作为 Python 包安装,使用 Docker 设置,或者在本地运行。以下是 Python 包安装的步骤:

## To install all available features
!pip3 install "crawl4ai[all]"

## After installation, download the necessary models for better performance:
!crawl4ai-download-models

## Lastly, install Playwright dependencies
!playwright install 

有关不同的安装方法,请参见 这里

⚙️ 基本用法

要开始使用 Crawl4AI,我们首先需要创建一个 AsyncWebCrawler 的实例。这是核心组件,它将通过使用异步上下文管理器有效地管理爬虫生命周期。默认情况下,它会缓存爬取结果,这意味着对同一 URL 的后续爬取将会更快!!

from crawl4ai import AsyncWebCrawler
from crawl4ai.chunking_strategy import RegexChunking

async with AsyncWebCrawler(verbose=True) as crawler:
    result = await crawler.arun(url="https://en.wikipedia.org/wiki/3_Idiots", bypass_cache=False) 
    print(f"Extracted content: {result.extracted_content}")

在上面的代码片段中:

  • url: 指定要爬取的网页。
  • bypass_cache: 是否强制进行新鲜爬取

提取的内容可以以多种格式提供,如 markdowncleaned_html,根据您的需求提供灵活性。

print(result.markdown)
print(result.cleaned_html)

📸 截取屏幕截图

它还允许您捕获您正在爬取的页面的屏幕截图。

import base64
from crawl4ai import AsyncWebCrawler

async with AsyncWebCrawler(verbose=True) as crawler:
    result = await crawler.arun(url="https://www.cricbuzz.com/", screenshot=True)
    with open("cricbuzz_screenshot.png", "wb") as f:
        f.write(base64.b64decode(result.screenshot))
    print("Screenshot saved to 'screenshot.png'!")

🔀 添加分块策略

现在我们将根据给定的正则表达式模式来拆分文本。

  • word_count_threshold: 设置有意义内容块的最小字数。
  • chunking_strategy: 定义用于拆分文本的分块策略。
from crawl4ai import AsyncWebCrawler
from crawl4ai.chunking_strategy import RegexChunking

async with AsyncWebCrawler(verbose=True) as crawler:
    result = await crawler.arun(url="https://en.wikipedia.org/wiki/3_Idiots", chunking_strategy=RegexChunking(patterns=["\n\n"]), word_count_threshold=10) 
    print(f"Extracted content: {result.extracted_content}")

🧠 添加高级提取策略

现在,让我们在爬虫中添加一个智能提取策略 — JsonCssExtractionStrategy。JsonCssExtractionStrategy通过为页面上重复元素定义基础选择器的模式,实现精确、结构化的数据提取。模式中的每个字段都有自己的选择器,允许提取嵌套结构或列表。这种方法非常适合将网页内容(如产品列表、文章或搜索结果)转换为干净的JSON格式,提供灵活性和准确性以进行网页数据提取。

from crawl4ai import AsyncWebCrawler
from crawl4ai.extraction_strategy import JsonCssExtractionStrategy
import json
import nest_asyncio
nest_asyncio.apply()


async def extract_news_teasers():
    schema = {
        "name": "News Teaser Extractor",
        "baseSelector": ".wide-tease-item__wrapper",
        "fields": [
            {
                "name": "category",
                "selector": ".unibrow span[data-testid='unibrow-text']",
                "type": "text",
            },
            {
                "name": "headline",
                "selector": ".wide-tease-item__headline",
                "type": "text",
            },
            {
                "name": "summary",
                "selector": ".wide-tease-item__description",
                "type": "text",
            },
            {
                "name": "time",
                "selector": "[data-testid='wide-tease-date']",
                "type": "text",
            },
            {
                "name": "image",
                "type": "nested",
                "selector": "picture.teasePicture img",
                "fields": [
                    {"name": "src", "type": "attribute", "attribute": "src"},
                    {"name": "alt", "type": "attribute", "attribute": "alt"},
                ],
            },
            {
                "name": "link",
                "selector": "a[href]",
                "type": "attribute",
                "attribute": "href",
            },
        ],
    }

    extraction_strategy = JsonCssExtractionStrategy(schema, verbose=True)

    async with AsyncWebCrawler(verbose=True) as crawler:
        result = await crawler.arun(
            url="https://www.nbcnews.com/business",
            extraction_strategy=extraction_strategy,
            bypass_cache=True,
        )

        assert result.success, "Failed to crawl the page"

        news_teasers = json.loads(result.extracted_content)
        print(f"Successfully extracted {len(news_teasers)} news teasers")
        print(json.dumps(news_teasers[0], indent=2))

await extract_news_teasers()

🔄 基于会话的动态内容爬取

Crawl4AI 的基于会话的爬取在处理 GitHub 等平台上的动态内容时特别有用。在这个例子中,我们使用它来提取多个页面的提交历史,利用自定义钩子确保新内容的正确加载。

import asyncio
import re
from bs4 import BeautifulSoup
from crawl4ai import AsyncWebCrawler

async def crawl_linux_commits():
    first_commit = ""
    async def on_execution_started(page):
        nonlocal first_commit 
        try:
            while True:
                await page.wait_for_selector('li.Box-sc-g0xbh4-0 h4')
                commit = await page.query_selector('li.Box-sc-g0xbh4-0 h4')
                commit = await commit.evaluate('(element) => element.textContent')
                commit = re.sub(r'\s+', '', commit)
                if commit and commit != first_commit:
                    first_commit = commit
                    break
                await asyncio.sleep(0.5)
        except Exception as e:
            print(f"警告:JavaScript 执行后新内容未出现: {e}")

    async with AsyncWebCrawler(verbose=True) as crawler:
        crawler.crawler_strategy.set_hook('on_execution_started', on_execution_started)

        url = "https://github.com/torvalds/linux/commits/master"
        session_id = "linux_commits_session"
        all_commits = []

        js_next_page = """
        const button = document.querySelector('a[data-testid="pagination-next-button"]');
        if (button) button.click();
        """

        for page in range(3):  # 爬取 3 个页面
            result = await crawler.arun(
                url=url,
                session_id=session_id,
                css_selector="li.Box-sc-g0xbh4-0",
                js=js_next_page if page > 0 else None,
                bypass_cache=True,
                js_only=page > 0
            )

            assert result.success, f"爬取页面 {page + 1} 失败"

            soup = BeautifulSoup(result.cleaned_html, 'html.parser')
            commits = soup.select("li")
            all_commits.extend(commits)

            print(f"页面 {page + 1}: 找到 {len(commits)} 个提交")

        await crawler.crawler_strategy.kill_session(session_id)
        print(f"成功爬取了 {len(all_commits)} 个提交,共 3 个页面")

asyncio.run(crawl_linux_commits())
  • 基于会话的爬取: 我们维护一个会话来处理动态内容并加载新页面。
  • JavaScript 执行: 自定义 JavaScript 点击 GitHub 提交页面上的“下一页”按钮以加载更多提交。
  • 自定义钩子: on_execution_started 钩子确保在继续之前新提交已加载。

该技术允许您在管理多个请求的状态时,从动态页面提取内容。

欲了解更多详细信息和高级用法,请查看 完整文档

现实世界的应用:

Crawl4AI 适用于广泛的应用场景,包括:

  • 训练大型语言模型: Crawl4AI 收集的结构化数据非常适合用于训练 LLM,帮助提高其在各种应用中的性能。
  • 市场研究: 企业可以利用 Crawl4AI 从竞争对手网站、新闻文章和社交媒体中获取洞察,促进数据驱动的决策。
  • 内容聚合: 内容创作者可以使用 Crawl4AI 从多个来源收集和整理信息,简化内容创作过程。
  • 学术研究: 研究人员可以自动化从学术出版物和在线数据库中收集数据,促进文献综述和数据分析。
  • 情感分析: 通过抓取评论和社交媒体帖子,用户可以分析公众对产品或服务的情感。
  • 实时数据检索: RAG 系统可以利用 Crawl4AI 从网络中获取最新信息,提高 AI 生成内容的准确性。
  • 动态函数调用: AI 代理可以利用 Crawl4AI 根据实时数据执行函数调用,允许更具互动性和响应性的应用。

结论

随着数据在各行业决策过程中变得越来越重要,像 Crawl4AI 这样的工具对于利用网络数据至关重要。其强大的自动化功能不仅节省了时间,还为分析和洞察生成开辟了新的途径。凭借多 URL 爬取、媒体提取和高级输出格式等功能,Crawl4AI 是一款强大且高效的网络爬虫工具,专为现代数据收集需求量身定制。无论您是开发者、研究人员还是企业主,它都提供了必要的资源,以简化您的数据提取过程并最大化您的洞察价值。

参考文献:

  1. Crawl4AI 文档
  2. Crawl4AI GitHub
  3. Crawl4AI:为 AI 代理自动化网络爬虫和数据提取

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多