首页
/ Crawl4AI v0.7.0 自适应智能更新深度解析:AdaptiveCrawler、虚拟滚动、链接智能评分与异步 URL 种子发现

Crawl4AI v0.7.0 自适应智能更新深度解析:AdaptiveCrawler、虚拟滚动、链接智能评分与异步 URL 种子发现

2026-09-06 22:05:07作者:侯霆垣

本篇基于 Crawl4AI 官方 v0.7.0 发布说明(仓库路径 release-v0.7.0.md)展开,逐条覆盖该版本的四大核心能力:自适应爬取(Adaptive Crawling)、虚拟滚动支持(Virtual Scroll)、链接预览与智能评分(Link Preview)、异步 URL 种子发现(Async URL Seeder),并结合当前仓库中的真实源码(AdaptiveCrawler 实现配置定义虚拟滚动处理链接预览器URL 种子引擎)给出参数默认值、调用链与底层原理,帮助读者完整掌握"让爬虫学会观察、评分与自我停止"这一套技术方案。

一、v0.7.0 发布概览

v0.7.0 是 Crawl4AI 被称为 "The Adaptive Intelligence Update" 的一次重要版本,官方发布说明将其定位为"通过自适应学习、智能内容发现与高级提取能力,从根本上改进爬虫处理现代 Web 复杂性的方式"。发布说明中的功能清单如下:

  • Adaptive Crawling(自适应爬取):爬虫会学习并适应网站模式,根据置信度自动决定爬多少页
  • Virtual Scroll Support(虚拟滚动支持):从无限滚动页面完整提取内容
  • Link Preview with Intelligent Scoring(链接预览与智能评分):对链接进行智能分析与优先级排序
  • Async URL Seeder(异步 URL 种子发现):结合智能过滤,秒级发现成百上千个 URL
  • Performance Optimizations(性能优化):速度与内存方面的显著改进

需要注意:当前仓库 版本文件 显示项目已演进至 0.9.0,下文以 v0.7.0 发布说明为骨架,源码引用则以当前仓库实际实现为准,两者在核心 API 上保持一致。

二、AdaptiveCrawler:通过模式学习实现自适应信息发现

2.1 要解决的问题

发布说明描述的经典痛点是:网站会变化,类名会漂移、ID 会消失,精心编写的选择器在凌晨三点失效,你醒来面对的是空数据。v0.7.0 的解决方案是一套自适应学习系统——它会观察模式、构建置信度分数,并随时调整提取策略。

2.2 完整用法示例

以下示例继承自发布说明原文,展示 AdaptiveCrawler 的核心调用方式(digest 方法接收起始 URL 与查询,返回一个 CrawlState 状态对象):

from crawl4ai import AsyncWebCrawler, AdaptiveCrawler, AdaptiveConfig
import asyncio

async def main():

    # Configure adaptive crawler
    config = AdaptiveConfig(
        strategy="statistical",  # or "embedding" for semantic understanding
        max_pages=10,
        confidence_threshold=0.7,  # Stop at 70% confidence
        top_k_links=3,  # Follow top 3 links per page
        min_gain_threshold=0.05  # Need 5% information gain to continue
    )

    async with AsyncWebCrawler(verbose=False) as crawler:
        adaptive = AdaptiveCrawler(crawler, config)

        print("Starting adaptive crawl about Python decorators...")
        result = await adaptive.digest(
            start_url="https://docs.python.org/3/glossary.html",
            query="python decorators functions wrapping"
        )

        print(f"\n✅ Crawling Complete!")
        print(f"• Confidence Level: {adaptive.confidence:.0%}")
        print(f"• Pages Crawled: {len(result.crawled_urls)}")
        print(f"• Knowledge Base: {len(adaptive.state.knowledge_base)} documents")

        # Get most relevant content
        relevant = adaptive.get_relevant_content(top_k=3)
        print(f"\nMost Relevant Pages:")
        for i, page in enumerate(relevant, 1):
            print(f"{i}. {page['url']} (relevance: {page['score']:.2%})")

asyncio.run(main())

AdaptiveCrawlerAdaptiveConfigCrawlStateStatisticalStrategy 均可从包顶层直接导入,见 包导出定义

2.3 AdaptiveConfig 完整参数表

发布说明只展示了 5 个常用参数,而 AdaptiveConfig 源码定义 揭示了完整的配置面。所有参数均可用默认值运行:

参数 默认值 说明
strategy "statistical" 爬取策略,可选 "statistical"(纯统计、无 LLM、无 embedding)或 "embedding"(语义空间覆盖)
confidence_threshold 0.7 置信度达到该值即停止(取值 0~1)
max_depth 5 自适应扩展的最大深度
max_pages 20 最大爬取页数
top_k_links 3 每轮选取得分最高的 K 个链接
min_gain_threshold 0.1 链接最高分低于该值则停止(信息增益门槛)
saturation_threshold 0.8 信息饱和度阈值,达到即停
consistency_threshold 0.7 一致性阈值
coverage_weight / consistency_weight / saturation_weight 0.4 / 0.3 / 0.3 三项指标加权组合,validate() 强制要求三者之和为 1
relevance_weight / novelty_weight / authority_weight 0.5 / 0.3 / 0.2 链接评分权重,同样强制和为 1
save_state / state_path False / None 是否持久化爬取状态、持久化文件路径
embedding_model "sentence-transformers/all-MiniLM-L6-v2" embedding 策略使用的向量模型
embedding_llm_config / query_llm_config None 分别为 embedding 生成与查询扩展(chat completion)单独配置的 LLM
n_query_variations 10 查询语义空间扩展的变体数量
coverage_threshold 0.85 语义覆盖阈值
embedding_coverage_radius 0.2 "已覆盖"查询点的余弦距离半径,越小越严格
embedding_k_exp 1.0 距离到分数映射的指数衰减因子(score = exp(-k·d))
embedding_nearest_weight / embedding_top_k_weight 0.7 / 0.3 最近邻与 top-k 均值的混合评分权重
embedding_overlap_threshold 0.85 高于该相似度的链接视为冗余并被降权
link_preview_timeout 5.0 链接预览(head 抓取)超时秒数
embedding_min_relative_improvement 0.1 继续爬取所需的最小相对置信度提升
embedding_validation_min_score 0.3 低于该验证分数则不认为收敛可信,防止过早停止

配置对象在构造 AdaptiveCrawler 时会调用 validate() 做断言校验(权重和为 1、各阈值在 0~1 区间等),非法配置会在启动阶段即报错。

2.4 工作原理:CrawlState 状态机与置信度公式

从源码结构看,AdaptiveCrawler.digest() 是整个流程的主循环:

  1. 初始化/恢复状态:若传入 resume_from,通过 CrawlState.load(path) 从 JSON 文件恢复完整状态(已爬 URL、知识库、待爬链接、词频统计、embedding 矩阵等),否则创建新的 CrawlState
  2. 首爬:对 start_url 执行一次带链接预览的爬取(内部构造 LinkPreviewConfig(max_links=50, concurrency=5, timeout=link_preview_timeout) 并开启 score_links=True,见 _crawl_with_preview),把返回的内部链接全部放入 pending_links 待选队列;
  3. 自适应扩展循环while depth < max_depth),每一轮依次执行:
    • calculate_confidence(state) 计算当前置信度;
    • should_stop(state, config) 判断是否停止;
    • rank_links(state, config) 对待爬链接按预期信息增益排序;
    • 若最高分低于 min_gain_threshold 则停止;
    • 取 top K 个链接并发批量爬取(_crawl_batch 使用 asyncio.gather),新结果合并进知识库与新链接队列。

统计策略 StatisticalStrategy 的置信度公式在源码中是显式的:

confidence = 0.4 * coverage + 0.3 * consistency + 0.3 * saturation

三个分量分别对应:

  • Coverage(覆盖率):对查询词逐一统计文档频率 df 与词频 tf,计算"文档覆盖率 × 对数频率加成",再开平方曲线平滑,衡量查询词在知识库中的存在程度;
  • Consistency(一致性):对知识库两两文档做词汇集合的 Jaccard 相似度,均值越高说明内容越围绕同一主题,避免爬虫跑题;
  • Saturation(饱和度):跟踪每页新增词条数历史,saturation = 1 - 近期新增速率 / 初始新增速率,当新信息发现速率趋近于零时判定信息饱和。

链接排序分数则为 relevance × 0.5 + novelty × 0.3 + authority × 0.2:相关性优先复用爬取阶段已算好的 BM25 上下文分数,新异性计算链接预览文本中"知识库尚未出现过的词"的占比,权威性则依据 URL 路径特征(/docs//api/ 加分,图片链接减分)与链接固有分数加权得出。

停止条件should_stop)包括:置信度达到阈值、已爬页数达到 max_pages、待爬链接耗尽、或饱和度超过阈值——这四条与发布说明中"构建置信度分数并随时调整提取策略"的描述一一对应。

2.5 Embedding 策略与状态持久化

除统计策略外,strategy="embedding" 时启用 EmbeddingStrategy:先用 LLM 把查询扩展为 n_query_variations 个语义变体,构建查询点云,再用向量距离矩阵衡量"知识库对查询语义空间的覆盖程度",发现覆盖缺口后优先扩展能填补缺口的链接;入库时对新文档 embedding 做相似度去重(阈值 0.95),避免重复内容稀释知识库。

此外,CrawlState 提供 save(path) / load(path) 实现跨进程断点续爬,digest(start_url, query, resume_from=...) 可直接从文件恢复。爬取完成后,AdaptiveCrawler 还提供:

  • export_knowledge_base(filepath) / import_knowledge_base(filepath):知识库以 JSONL 格式导出/导入,便于沉淀语料;
  • coverage_statsprint_stats(detailed=True)is_sufficientget_relevant_content(top_k):覆盖率统计、富文本报告、充分性判断与相关性内容检索。

发布说明中列出的"预期实战影响"包括:新闻聚合(模板更新下维持高提取准确率)、电商监控(跨数百店铺追踪商品变化)、研究数据采集(经受得住网站改版)、维护成本下降。这些是发布说明给出的应用场景描述,仓库中还提供了配套的官方示例 adaptive_crawling 示例目录 与测试 test_adaptive_crawler.py 供对照验证。

三、Virtual Scroll:从无限滚动页面完整捕获内容

3.1 要解决的问题

现代 Web 应用只渲染可视区域的内容:向下滚动,新内容出现,旧内容被虚拟 DOM 回收机制销毁。传统爬虫只能捕获首屏,可能漏掉绝大部分内容。v0.7.0 的解决方案是模拟人类浏览行为,在内容被浏览器"垃圾回收"之前先保存下来。

3.2 三种典型场景配置

发布说明给出的配置示例覆盖了社交媒体、电商网格、新闻流三类虚拟滚动场景,可直接复制使用:

from crawl4ai import VirtualScrollConfig

# For social media feeds (Twitter/X style)
twitter_config = VirtualScrollConfig(
    container_selector="[data-testid='primaryColumn']",
    scroll_count=20,                    # Number of scrolls
    scroll_by="container_height",       # Smart scrolling by container size
    wait_after_scroll=1.0              # Let content load
)

# For e-commerce product grids (Instagram style)
grid_config = VirtualScrollConfig(
    container_selector="main .product-grid",
    scroll_count=30,
    scroll_by=800,                     # Fixed pixel scrolling
    wait_after_scroll=1.5               # Images need time
)

# For news feeds with lazy loading
news_config = VirtualScrollConfig(
    container_selector=".article-feed",
    scroll_count=50,
    scroll_by="page_height",           # Viewport-based scrolling
    wait_after_scroll=0.5              # Wait for content to load
)

# Use it in your crawl
async with AsyncWebCrawler() as crawler:
    result = await crawler.arun(
        "https://twitter.com/trending",
        config=CrawlerRunConfig(
            virtual_scroll_config=twitter_config,
            # Combine with other features
            extraction_strategy=JsonCssExtractionStrategy({
                "tweets": {
                    "selector": "[data-testid='tweet']",
                    "fields": {
                        "text": {"selector": "[data-testid='tweetText']", "type": "text"},
                        "likes": {"selector": "[data-testid='like']", "type": "text"}
                    }
                }
            })
        )
    )

    print(f"Captured {len(result.extracted_content['tweets'])} tweets")

3.3 VirtualScrollConfig 参数与默认值

VirtualScrollConfig 定义 中各参数默认值为:

参数 默认值 说明
container_selector 必填 可滚动容器的 CSS 选择器,JS 会在该容器上执行 scrollTop 滚动
scroll_count 10 最大滚动次数上限
scroll_by "container_height" 滚动步长:整数表示固定像素;"page_height" 表示一个视口高度;"container_height" 表示容器自身高度
wait_after_scroll 0.5 每次滚动后的等待秒数,留给异步内容加载

virtual_scroll_config 作为 CrawlerRunConfig 的一级参数传入 arun(),既接受配置对象也接受 dict(内部会调用 VirtualScrollConfig.from_dict 归一化)。

3.4 实现原理:DOM 回收感知与内容保全

虚拟滚动处理入口 揭示了完整的实现逻辑:爬虫策略在页面交互阶段向浏览器注入一段 JavaScript,对目标容器执行"滚动—等待—比对"循环,并按容器 HTML 的变化分三种情况处理:

  1. HTML 无变化:继续滚动(可能还没触底或内容未加载);
  2. HTML 是前一版的前缀(新条目追加):内容仍在页面上,无需额外保存,继续滚动;
  3. 条目被替换(虚拟列表回收了顶部元素):立即把被替换前的 HTML 片段存入 htmlChunks 列表——这就是发布说明所说的"DOM 回收感知"与"内容保全",抢在浏览器销毁旧节点前留存。

滚动终止条件有二:达到 scroll_count 上限,或 scrollTop + clientHeight >= scrollHeight - 10 触底(对应发布说明的"智能停止:当不再出现新内容时停止")。若循环中捕获过 HTML 片段,最后会做块合并:解析每个片段,对每个元素提取归一化文本(小写并去除空白与符号)去重,只保留首次出现的元素,最终替换容器 innerHTML 后再交给正常提取流程。仓库中的测试 test_virtual_scroll.py 与示例 virtual_scroll_example.py 覆盖了这一能力的回归验证。

发布说明列出的关键能力还包括:三种滚动物理模式(容器高度/页面高度/固定像素)、内容保全、智能停止、内存友好(流式捕获而非全量驻留内存);预期实战影响包括完整捕获数百条回复的 Twitter 线程、从无限滚动商品目录提取 500+ 商品(对比传统方式的 20~50 个)等。

四、Link Preview:链接智能分析与三层评分

4.1 用法

发布说明的核心痛点:爬到一个页面拿到 200 个链接,哪些值得跟?v0.7.0 提供三层评分系统,像人类一样综合考虑链接的位置、上下文与目标相关性。完整示例(含 score_links=True 启用固有评分、从 result.links 读取分数字段):

import asyncio
from crawl4ai import CrawlerRunConfig, CacheMode, AsyncWebCrawler
from crawl4ai.adaptive_crawler import LinkPreviewConfig

async def main():
    # Configure intelligent link analysis
    link_config = LinkPreviewConfig(
        include_internal=True,
        include_external=False,
        max_links=10,
        concurrency=5,
        query="python tutorial",  # For contextual scoring
        score_threshold=0.3,
        verbose=True
    )
    # Use in your crawl
    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun(
            "https://www.geeksforgeeks.org/",
            config=CrawlerRunConfig(
                link_preview_config=link_config,
                score_links=True,  # Enable intrinsic scoring
                cache_mode=CacheMode.BYPASS
            )
        )

        # Access scored and sorted links
        if result.success and result.links:
            for link in result.links.get("internal", []):
                text = link.get('text', 'No text')[:40]
                print(
                    text,
                    f"{link.get('intrinsic_score', 0):.1f}/10" if link.get('intrinsic_score') is not None else "0.0/10",
                    f"{link.get('contextual_score', 0):.2f}/1" if link.get('contextual_score') is not None else "0.00/1",
                    f"{link.get('total_score', 0):.3f}" if link.get('total_score') is not None else "0.000"
                )

asyncio.run(main())

注意 LinkPreviewConfig包导出 中已直接暴露在 crawl4ai 顶层,示例中的 from crawl4ai.adaptive_crawler import LinkPreviewConfig 写法与 from crawl4ai import LinkPreviewConfig 均可用。

4.2 LinkPreviewConfig 参数

源码默认值如下(定义于 async_configs.py):

参数 默认值 说明
include_internal True 是否包含站内链接
include_external False 是否包含站外链接
include_patterns / exclude_patterns None 按 URL 模式包含/排除(glob 风格)
concurrency 10 并发抓取链接 head 的协程数
timeout 5 单个链接 head 抓取超时(秒)
max_links 100 最多预览的链接数量
query None 上下文评分用查询串
score_threshold None 相关性分数过滤阈值
verbose False 是否输出调试日志

4.3 三层评分机制的源码印证

发布说明描述的评分组件在源码中可以逐条找到对应实现:

  1. Intrinsic Score(固有分数):链接质量指标——页面位置(导航/正文/页脚)、链接属性(rel、title、class)、锚文本质量与长度、URL 结构与深度。对应实现为 calculate_link_intrinsic_score(输入锚文本、URL、title/class/rel 属性与页面上下文,输出 0~10 分);
  2. Contextual Score(上下文分数):基于 BM25 算法计算链接与查询的相关性,综合链接文本/标题关键词匹配、meta 描述分析、内容预览评分——query 参数正是为此提供;
  3. Total Score(综合分数):由 calculate_total_score 根据是否开启 score_links、是否提供 query 决定融合方式,用于最终排序。

执行层 LinkPreview 类 的流程是:按配置过滤链接 → 并发抓取每个链接的 <head>(标题与 meta)→ 将 head 数据合并回 Links 对象并计算相关性分数。这一能力同时被第二节提到的 AdaptiveCrawler 复用(每页爬取时自动附带 max_links=50 的预览配置),是 v0.7.0 "智能内容发现"的公共底座。配套测试见 test_link_extractor.py

五、Async URL Seeder:规模化 URL 自动发现

5.1 用法

发布说明指出:想爬整个域名却只有首页 URL,人工枚举 URL 是机器该干的活。Async URL Seeder 把多数据源与智能过滤、相关性评分组合起来。发布说明示例:

import asyncio
from crawl4ai import AsyncUrlSeeder, SeedingConfig

async def main():
    async with AsyncUrlSeeder() as seeder:
        # Discover Python tutorial URLs
        config = SeedingConfig(
            source="sitemap",  # Use sitemap
            pattern="*python*",  # URL pattern filter
            extract_head=True,  # Get metadata
            query="python tutorial",  # For relevance scoring
            scoring_method="bm25",
            score_threshold=0.2,
            max_urls=10
        )

        print("Discovering Python async tutorial URLs...")
        urls = await seeder.urls("https://www.geeksforgeeks.org/", config)

        print(f"\n✅ Found {len(urls)} relevant URLs:")
        for i, url_info in enumerate(urls[:5], 1):
            print(f"\n{i}. {url_info['url']}")
            if url_info.get('relevance_score'):
                print(f"   Relevance: {url_info['relevance_score']:.3f}")
            if url_info.get('head_data', {}).get('title'):
                print(f"   Title: {url_info['head_data']['title'][:60]}...")

asyncio.run(main())

除独立使用外,AsyncWebCrawler 还内置了 aseed_urls() 方法(见 async_webcrawler.py),可在同一浏览器会话生命周期内完成"发现 → 爬取"。

5.2 SeedingConfig 完整参数

参数 默认值 说明
source "sitemap+cc" 数据源:sitemap(解析 robots.txt 与全部关联 sitemap)、cc(查询 Common Crawl 索引的历史 URL)、或二者组合
pattern "*" URL 模式过滤(glob,如 *python*
live_check False 是否对 URL 做实时可达性检查
extract_head False 是否抓取每个 URL 的 <head> 元数据(标题/description)
max_urls -1 最大返回 URL 数(-1 为不限)
concurrency 1000 并发上限
hits_per_sec 5 请求速率上限(每秒命中数)
force False 是否忽略缓存强制重新发现
query None 用于相关性评分的查询
score_threshold None 相关性分数过滤阈值
scoring_method "bm25" 评分算法
filter_nonsense_urls True 过滤明显无意义的 URL(脚本、样式资源等)
cache_ttl_hours 24 本地缓存有效期(小时)
validate_sitemap_lastmod True 校验 sitemap 的 lastmod 以判断缓存是否失效
base_directory None 缓存目录根路径

5.3 发现方法的源码印证

发布说明列出四种发现方法,前两种在 AsyncUrlSeeder 中可直接定位到实现:

  • Sitemap Mining_from_sitemaps 先请求 robots.txt,提取其中声明的所有 Sitemap: 地址,支持 sitemap 索引(嵌套子 sitemap)递归展开,并对 XML 内容做 _loc 归一化;
  • Common Crawl_from_cc 查询 Common Crawl 索引接口获取该域名的历史 URL 集合;
  • 缓存与限速:结果按域名 + 配置写入本地缓存文件,配合 cache_ttl_hours 与 sitemap lastmod 校验(_is_cache_valid)避免重复全量发现,hits_per_sec 控制对外部索引的访问速率;
  • 智能爬取与模式分析:发布说明提及的"跟随链接的深度控制"与"URL 结构学习生成变体",在当前仓库中由后续的 DomainMapper 进一步工程化(sitemap+cc+crt+probe 多源扫描、路径探测、软 404 指纹识别),可以理解为该方向的自然延伸。

若开启 queryextract_head_apply_bm25_scoring 会以"URL + 标题 + meta 描述"为文档单元做 BM25 打分,低于 score_threshold 的结果被过滤——这与发布说明的"智能过滤与相关性评分"描述一致。配套测试与文档可参考 test_async_url_seeder_bm25.pyURL 种子教程

六、性能优化

发布说明指出 v0.7.0 通过优化的资源处理、更优的并发管理与更小的内存占用带来显著性能提升,并给出示例:

# Optimized crawling with v0.7.0 improvements
results = []
for url in urls:
    result = await crawler.arun(
        url,
        config=CrawlerRunConfig(
            # Performance optimizations
            wait_until="domcontentloaded",  # Faster than networkidle
            cache_mode=CacheMode.ENABLED    # Enable caching
        )
    )
    results.append(result)

结合源码可以印证两点:wait_until="domcontentloaded" 正是当前 CrawlerRunConfig 的默认等待策略(DOM 就绪而非网络空闲,显著减少等待时间);cache_mode 默认 BYPASS,需要显式设置为 ENABLED 等模式才启用 SQLite 缓存(缓存读写由 AsyncDatabase 管理)。发布说明声称的性能收益(浏览器初始化快 70%、页面加载降 40%、提取快 3 倍、内存降 60%、并发容量提升 5 倍)来自官方发布说明,实际数值请以自身环境压测为准。

七、破坏性变更与迁移指南

v0.7.0 的破坏性变更共三项,升级前必须处理:

  • link_extractor 重命名为 link_preview(更准确反映"抓取链接 head 信息"的功能);
  • 最低 Python 版本提升为 3.9;
  • CrawlerConfig 拆分为 CrawlerRunConfig(单次爬取行为)与 BrowserConfig(浏览器生命周期),发布说明给出的迁移对照:
# Old (v0.6.x)
from crawl4ai import CrawlerConfig
config = CrawlerConfig(timeout=30000)

# New (v0.7.0)
from crawl4ai import CrawlerRunConfig, BrowserConfig
browser_config = BrowserConfig(timeout=30000)
run_config = CrawlerRunConfig(cache_mode=CacheMode.BYPASS)

从当前源码结构看,这一拆分是长期生效的架构:BrowserConfig 管理浏览器类型、headless、CDP、代理、视口、stealth 等会话级配置,CrawlerRunConfig 管理缓存、等待、提取策略、link_preview_configvirtual_scroll_config 等单次爬取配置,二者分别传给 AsyncWebCrawler(config=...)arun(config=...)

八、路线图:智能 Web 自动化

发布说明还预告了后续方向:Crawl Agents(理解目标并自适应策略的自主爬虫)、自动 JS 生成(复杂交互)、智能表单处理、上下文感知动作。从当前仓库看,其中"自动 JS 生成"方向已落地为 C4A 脚本语言(c4a_compile.py 提供 compile/validate/generate_script,可由 HTML + 自然语言查询生成 .c4a 脚本)与 c4a-script 文档

九、安装与版本说明

安装指定版本:

pip install crawl4ai==0.7.0

说明与适用前提:

  • 本文以 v0.7.0 发布说明为骨架;当前仓库已演进到 0.9.0(version.py),核心 API(AdaptiveCrawler/VirtualScrollConfig/LinkPreviewConfig/AsyncUrlSeeder)保持一致,但 0.7.0 之后的版本在参数与行为上可能有增强,引用新参数时请以对应版本源码为准;
  • AdaptiveConfig(strategy="embedding") 需要 embedding 依赖(sentence-transformers)及可选的 LLM 配置,纯统计策略则零额外依赖;
  • 相关深入文档可继续查阅仓库内的 adaptive-crawlingurl-seedinglazy-loading(虚拟滚动)link-media,以及 adaptive_crawling 示例目录

十、关键源码路径速查

能力 源码位置 验证位置
自适应爬取主流程 crawl4ai/adaptive_crawler.py tests/adaptive/test_adaptive_crawler.py
置信度公式(统计策略) StatisticalStrategy tests/adaptive/test_embedding_strategy.py
虚拟滚动处理 crawl4ai/async_crawler_strategy.py tests/test_virtual_scroll.py
链接预览执行 crawl4ai/link_preview.py tests/test_link_extractor.py
链接评分函数 crawl4ai/utils.py
URL 种子引擎 crawl4ai/async_url_seeder.py tests/general/test_async_url_seeder_bm25.py
配置定义(VirtualScroll/Seeding/LinkPreview/RunConfig) crawl4ai/async_configs.py tests/test_config_defaults.py
登录后查看全文
热门项目推荐
相关项目推荐