URL 种子:大规模爬取的智能方式

为何选择 URL 种子?

网络爬取有多种方式,每种方式都有其优势。让我们了解何时使用 URL 种子与深度爬取。

深度爬取:实时发现

深度爬取在以下情况下非常完美: - 新鲜、实时的数据 - 在页面创建时发现它们 - 动态探索 - 基于内容跟踪链接 - 选择性提取 - 找到所需内容后停止

# Deep crawling example: Explore a website dynamically
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig
from crawl4ai.deep_crawling import BFSDeepCrawlStrategy

async def deep_crawl_example():
    # Configure a 2-level deep crawl
    config = CrawlerRunConfig(
        deep_crawl_strategy=BFSDeepCrawlStrategy(
            max_depth=2,           # Crawl 2 levels deep
            include_external=False, # Stay within domain
            max_pages=50           # Limit for efficiency
        ),
        verbose=True
    )

    async with AsyncWebCrawler() as crawler:
        # Start crawling and follow links dynamically
        results = await crawler.arun("https://example.com", config=config)

        print(f"Discovered and crawled {len(results)} pages")
        for result in results[:3]:
            print(f"Found: {result.url} at depth {result.metadata.get('depth', 0)}")

asyncio.run(deep_crawl_example())

URL 种子:批量发现

URL 种子在以下情况下表现出色: - 全面覆盖 - 在几秒钟内获取数千个 URL - 批量处理 - 在爬取前进行过滤 - 资源效率 - 确切知道要爬取的内容

# URL seeding example: Analyze all documentation
from crawl4ai import AsyncUrlSeeder, SeedingConfig

seeder = AsyncUrlSeeder()
config = SeedingConfig(
    source="sitemap",
    extract_head=True,
    pattern="*/docs/*"
)

# Get ALL documentation URLs instantly
url极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = AsyncUrlSeeder()

    # Step 2: Configure discovery - let's find all blog posts
    config = SeedingConfig(
        source="sitemap",           # Use the website's sitemap
        pattern="*/blog/*.html",    # Only blog posts
        extract_head=True,          # Get page metadata
        max_urls=100               # Limit for this example
    )

    # Step 3: Discover URLs from the Python blog
    print("🔍 Discovering blog posts...")
    urls = await seeder.urls("realpython.com", config)
    print(f"✅ Found {len(urls)} blog posts")

    # Step 4: Filter for Python tutorials (using metadata!)
    tutorials = [
        url for url in urls 
        if url["status"] == "valid" and 
        any(keyword in str(url["head_data"]).lower() 
            for keyword in ["tutorial", "guide", "how to"])
    ]
    print(f"📚 Filtered to {len(tutorials)} tutorials")

    # Step 5: Show what we found
    print("\n🎯 Found these tutorials:")
    for tutorial in tutorials[:5]:  # First 5
        title = tutorial["极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力**极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = AsyncUrlSeeder()

    # Step 2: Configure discovery - let's find all blog posts
    config = SeedingConfig(
        source="sitemap",           # Use the website's sitemap
        pattern="*/blog/*.html",    # Only blog posts
        extract_head=True,          # Get page metadata
        max_url极速获取所有文档URL
urls = await seeder.urls极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 方面 | 深度极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
**新鲜极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+极速获取所有极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

## 您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

```python
import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, Crawler极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyn极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 方面 | 深度爬取 | URL 种子 | |--------|---------------极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围极速获取所有文档URL
url极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

**选择 URL 极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再极速获取所有文档URL
urls = await seeder.urls("极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度极速获取所有文档URL
urls = await seeder.urls("example.com", config)
极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现100极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

## 您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

```python
import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = AsyncUrlSeeder()

    # Step 2: Configure discovery - let's find all blog posts极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

## 您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

```python
import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = AsyncUrlSeeder()

    # Step 2: Configure discovery - let's find all blog posts
    config = SeedingConfig(
        source="sitemap",           # Use the website's sitemap
        pattern="*/blog/*.html",    # Only blog posts
        extract_head=True,          # Get page metadata
        max_urls=100               # Limit for this example
    )

    # Step 3: Discover URLs from the Python blog
    print("🔍 Discovering blog posts...")
    urls = await seeder.urls("realpython.com", config)
    print(f"✅ Found {len(urls)} blog posts")

    # Step 4: Filter for Python tutorials (using metadata!)
    tutorials = [
        url for极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

## 您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
**极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 方面 | 深度爬取 | URL 极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现极速获取所有文档URL
urls = await极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制极速获取所有文档URL
urls = await seeder.urls("example.com极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 方面 | 深度爬取 | URL 种子 | |--------极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

**选择深度爬取极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

## 您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

```python
import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = Async极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000极速获取所有文档URL
urls = await seeder.urls("example.com",极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = AsyncUrlSeeder()

    # Step 2: Configure discovery - let's find all blog posts
    config = SeedingConfig(
        source="sitemap",           # Use the website's sitem极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

## 您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

```python
import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = AsyncUrlSeeder()

    # Step 2: Configure discovery - let's find all blog posts
    config = SeedingConfig(
        source="sitemap",           # Use the website's sitemap
        pattern="*/blog/*.html",    # Only blog posts
        extract_head=True,          # Get page metadata
        max_urls=100               # Limit for this example
    )

    # Step 3: Discover URLs from the Python blog
    print("🔍 Discovering blog posts...")
    urls = await seeder.urls("realpython.com", config)
    print极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

## 您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

```python
import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discover极速获取所有文档URL
urls = await seeder.urls("example.com", config极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 方面 | 深度爬取 | URL 极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现极速获取所有文档URL
urls = await seeder.urls("极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4ai import AsyncUrlSeeder, Async极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 极速获取所有文档极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

极速获取所有文档URL

urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
**极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 极速获取所有文档URL
urls = await seeder.urls("example极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围**极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_craw极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 方面 | 深度爬取 | URL 种子 | |--------极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个极速获取所有文档URL

urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止极速获取所有文档URL
url极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!
### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

| 方面 | 深度爬取 |极速获取所有文档URL urls = await seeder.urls("example.com", config)

几秒钟内发现1000+个URL!

### 权衡比较

| 方面 | 深度爬取 | URL 种子 |
|--------|---------------|-------------|
| **覆盖范围** | 动态发现页面 | 立即获取大多数现有 URL |
| **新鲜度** | 发现全新页面 | 可能错过最新页面 |
| **速度** | 较慢,逐页处理 | 极快的批量发现 |
| **资源使用** | 较高 - 需要爬取才能发现 | 较低 - 先发现再爬取 |
| **控制力** | 可以在过程中停止 | 在爬取前预过滤 |

### 何时使用每种方式

**选择深度爬取当:**
- 您需要最新的内容
- 您正在搜索特定信息
- 网站结构未知或动态变化
- 找到所需内容后希望立即停止

**选择 URL 种子当:**
- 您需要分析网站的大部分内容
- 您希望在爬取前过滤 URL
- 您正在进行比较分析
- 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL!

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
资源使用 较高 - 需要爬取才能发现 较低 - 先发现再爬取
控制力 可以在过程中停止 在爬取前预过滤

何时使用每种方式

选择深度爬取当: - 您需要最新的内容 - 您正在搜索特定信息 - 网站结构未知或动态变化 - 找到所需内容后希望立即停止

选择 URL 种子当: - 您需要分析网站的大部分内容 - 您希望在爬取前过滤 URL - 您正在进行比较分析 - 您需要优化资源使用

当您理解这两种方法并为任务选择正确的工具时,魔法就发生了。有时,您甚至可以将它们结合使用 - 使用 URL 种子进行批量发现,然后深度爬取特定部分以获取最新更新。

您的首次 URL 种子冒险

让我们看看实际效果。我们将发现关于 Python 的博客文章,筛选教程,并仅爬取这些页面。

import asyncio
from crawl4ai import AsyncUrlSeeder, AsyncWebCrawler, SeedingConfig, CrawlerRunConfig

async def smart_blog_crawler():
    # Step 1: Create our URL discoverer
    seeder = AsyncUrlSeeder()

    # Step 2: Configure discovery - let's find all blog posts
    config = SeedingConfig(
        source="sitemap",           # Use the website's sitemap
        pattern="*/blog/*.html",    # Only blog posts
        extract_head=True,          # Get page metadata
        max_urls=100               # Limit for this example
    )

    # Step 3: Discover URLs from the Python blog
    print("🔍 Discovering blog posts...")
    urls = await seeder.urls("realpython.com", config)
    print(f"✅ Found {极速获取所有文档URL
urls = await seeder.urls("example.com", config)
# 几秒钟内发现1000+个URL

权衡比较

方面 深度爬取 URL 种子
覆盖范围 动态发现页面 立即获取大多数现有 URL
新鲜度 发现全新页面 可能错过最新页面
速度 较慢,逐页处理 极快的批量发现
**资源使用

> Feedback