浏览器、爬虫和 LLM 配置(快速概览)

Crawl4AI 的灵活性源于两个关键类别:

  1. – 规定浏览器的启动和行为方式(例如,无头或可见、代理、用户代理)。
  2. – 规定每次爬网的操作方式(例如,缓存、提取、超时、运行 JavaScript 代码等)。
  3. - 规定如何配置 LLM 提供程序。(模型、API 令牌、基本 URL、温度等)

在大多数示例中,您可以创建一个BrowserConfig在整个爬虫会话中,然后传递一个新的或重新使用的CrawlerRunConfig无论何时你打电话arun()本教程展示了最常用的参数。如果您需要高级或不常用的字段,请参阅配置参数


1. BrowserConfig 基本信息

class BrowserConfig:
    def __init__(
        browser_type="chromium",
        headless=True,
        proxy_config=None,
        viewport_width=1080,
        viewport_height=600,
        verbose=True,
        use_persistent_context=False,
        user_data_dir=None,
        cookies=None,
        headers=None,
        user_agent=None,
        text_mode=False,
        light_mode=False,
        extra_args=None,
        # ... other advanced parameters omitted here
    ):
        ...

需要注意的关键字段

  1. 选项:"chromium""firefox" , 或者"webkit"
  2. 默认为"chromium"
  3. 如果您需要不同的引擎,请在此处指定。
  4. :以无头模式(隐形浏览器)运行浏览器。
  5. :以可见模式运行浏览器,有助于调试。
  6. 具有如下字段的字典:
    {
        "server": "http://proxy.example.com:8080", 
        "username": "...", 
        "password": "..."
    }
    
  7. 保留为None如果不需要代理。
  8. &viewport_height
  9. 初始窗口大小。
  10. 某些网站在视口较大或较小时会表现出不同的行为。
  11. 如果True,打印额外的日志。
  12. 方便调试。
  13. 如果True,使用持久浏览器配置文件,在运行期间存储 cookie/本地存储。
  14. 通常还设置user_data_dir指向一个文件夹。
  15. &headers
  16. 如果您想从特定的 cookie 开始或添加通用 HTTP 标头,请在此处设置它们。
  17. 例如cookies=[{"name": "session", "value": "abc123", "domain": "example.com"}]
  18. 自定义 User-Agent 字符串。如果None,则使用默认值。
  19. 您还可以设置user_agent_mode="random"用于随机化(如果你想对抗机器人检测)。
  20. &light_mode
  21. 禁用图像,可能会加快纯文本爬行速度。
  22. 为提高性能,请关闭某些后台功能。
  23. :底层浏览器的附加标志。例如["--disable-extensions"]

辅助方法

两种配置类都提供了clone()创建修改副本的方法:

# Create a base browser config
base_browser = BrowserConfig(
    browser_type="chromium",
    headless=True,
    text_mode=True
)

# Create a visible browser config for debugging
debug_browser = base_browser.clone(
    headless=False,
    verbose=True
)

最小示例:

from crawl4ai import AsyncWebCrawler, BrowserConfig

browser_conf = BrowserConfig(
    browser_type="firefox",
    headless=False,
    text_mode=True
)

async with AsyncWebCrawler(config=browser_conf) as crawler:
    result = await crawler.arun("https://example.com")
    print(result.markdown[:300])

2. CrawlerRunConfig 基本信息

class CrawlerRunConfig:
    def __init__(
        word_count_threshold=200,
        extraction_strategy=None,
        markdown_generator=None,
        cache_mode=None,
        js_code=None,
        wait_for=None,
        screenshot=False,
        pdf=False,
        capture_mhtml=False,
        # Location and Identity Parameters
        locale=None,            # e.g. "en-US", "fr-FR"
        timezone_id=None,       # e.g. "America/New_York"
        geolocation=None,       # GeolocationConfig object
        # Resource Management
        enable_rate_limiting=False,
        rate_limit_config=None,
        memory_threshold_percent=70.0,
        check_interval=1.0,
        max_session_permit=20,
        display_mode=None,
        verbose=True,
        stream=False,  # Enable streaming for arun_many()
        # ... other advanced parameters omitted
    ):
        ...

需要注意的关键字段

  1. 考虑区块之前的最小字数。
  2. 如果您的网站有很多短段落或项目,您可以降低它。
  3. 在其中插入基于 JSON 的提取(CSS、LLM 等)。
  4. 如果None,没有进行结构化提取(仅进行原始/清理的 HTML + markdown)。
  5. 例如,DefaultMarkdownGenerator(...) ,控制如何进行 HTML→Markdown 转换。
  6. 如果None,使用默认方法。
  7. 控制缓存行为(ENABLEDBYPASSDISABLED , ETC。)。
  8. 如果None,默认为某种级别的缓存,或者您可以指定CacheMode.ENABLED
  9. 要执行的字符串或 JS 字符串列表。
  10. 非常适合“加载更多”按钮或用户交互。
  11. 提取内容之前要等待的 CSS 或 JS 表达式。
  12. 常见用法:wait_for="css:.main-loaded"或者wait_for="js:() => window.loaded === true"
  13. pdf ,&capture_mhtml
  14. 如果True,在页面完全加载后捕获屏幕截图、PDF 或 MHTML 快照。
  15. 结果result.screenshot(base64),result.pdf (字节),或result.mhtml(细绳)。
  16. 位置参数:
  17. :浏览器的语言环境(例如,"en-US""fr-FR" ) 语言偏好设置
  18. :浏览器的时区(例如,"America/New_York""Europe/Paris" )
  19. :GPS 坐标通过GeolocationConfig(latitude=48.8566, longitude=2.3522)
  20. 参见基于身份的爬取
  21. 记录额外的运行时详细信息。
  22. 如果也设置为,则与浏览器的详细程度重叠TrueBrowserConfig
  23. 如果True,启用批处理的速率限制。
  24. 需要rate_limit_config待设置。
  25. :要监控的内存阈值(百分比)。如果超出阈值,爬虫将暂停或减慢速度。
  26. :检查系统资源的间隔(以秒为单位)。影响监控内存和 CPU 使用率的频率。
  27. :并发抓取会话的最大数量。有助于防止系统过载。
  28. :进度信息的显示模式(DETAILEDBRIEF等)。影响抓取过程中打印的信息量。

辅助方法

clone()方法对于创建爬虫配置的变体特别有用:

# Create a base configuration
base_config = CrawlerRunConfig(
    cache_mode=CacheMode.ENABLED,
    word_count_threshold=200,
    wait_until="networkidle"
)

# Create variations for different use cases
stream_config = base_config.clone(
    stream=True,  # Enable streaming mode
    cache_mode=CacheMode.BYPASS
)

debug_config = base_config.clone(
    page_timeout=120000,  # Longer timeout for debugging
    verbose=True
)

clone()方法: - 使用相同的设置创建新实例 - 仅更新指定的参数 - 保持原始配置不变 - 非常适合创建变体而无需重复所有参数


3. LLMConfig 要点

需要注意的关键字段

  1. 使用哪个 LLM 提供商。
  2. 可能的值包括"ollama/llama3","groq/llama3-70b-8192","groq/llama3-8b-8192", "openai/gpt-4o-mini" ,"openai/gpt-4o","openai/o1-mini","openai/o1-preview","openai/o3-mini","openai/o3-mini-high","anthropic/claude-3-haiku-20240307","anthropic/claude-3-opus-20240229","anthropic/claude-3-sonnet-20240229","anthropic/claude-3-5-sonnet-20240620","gemini/gemini-pro","gemini/gemini-1.5-pro","gemini/gemini-2.0-flash","gemini/gemini-2.0-flash-exp","gemini/gemini-2.0-flash-lite-preview-02-05","deepseek/deepseek-chat"(默认:"openai/gpt-4o-mini" )
  3. :可选。如果未明确提供,api_token 将根据提供商从环境变量中读取。例如:如果将 gemini 模型作为提供商传递,则"GEMINI_API_KEY"将从 LLM 提供程序的环境变量 API 令牌中读取,例如:api_token = "gsk_1ClHGGJ7Lpn4WGybR7vNWGdyb3FY7zXEw3SCiy0BAVM9lL8CQv"环境变量 - 使用前缀“env:”例如:api_token = "env: GROQ_API_KEY"
  4. 如果您的提供商有自定义端点
llm_config = LLMConfig(provider="openai/gpt-4o-mini", api_token=os.getenv("OPENAI_API_KEY"))

4. 整合

在典型情况下,您可以定义一个BrowserConfig为您的爬虫会话创建一个或多个CrawlerRunConfig&LLMConfig根据每次呼叫的需求:

import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode, LLMConfig, LLMContentFilter, DefaultMarkdownGenerator
from crawl4ai import JsonCssExtractionStrategy

async def main():
    # 1) Browser config: headless, bigger viewport, no proxy
    browser_conf = BrowserConfig(
        headless=True,
        viewport_width=1280,
        viewport_height=720
    )

    # 2) Example extraction strategy
    schema = {
        "name": "Articles",
        "baseSelector": "div.article",
        "fields": [
            {"name": "title", "selector": "h2", "type": "text"},
            {"name": "link", "selector": "a", "type": "attribute", "attribute": "href"}
        ]
    }
    extraction = JsonCssExtractionStrategy(schema)

    # 3) Example LLM content filtering

    gemini_config = LLMConfig(
        provider="gemini/gemini-1.5-pro", 
        api_token = "env:GEMINI_API_TOKEN"
    )

    # Initialize LLM filter with specific instruction
    filter = LLMContentFilter(
        llm_config=gemini_config,  # or your preferred provider
        instruction="""
        Focus on extracting the core educational content.
        Include:
        - Key concepts and explanations
        - Important code examples
        - Essential technical details
        Exclude:
        - Navigation elements
        - Sidebars
        - Footer content
        Format the output as clean markdown with proper code blocks and headers.
        """,
        chunk_token_threshold=500,  # Adjust based on your needs
        verbose=True
    )

    md_generator = DefaultMarkdownGenerator(
        content_filter=filter,
        options={"ignore_links": True}
    )

    # 4) Crawler run config: skip cache, use extraction
    run_conf = CrawlerRunConfig(
        markdown_generator=md_generator,
        extraction_strategy=extraction,
        cache_mode=CacheMode.BYPASS,
    )

    async with AsyncWebCrawler(config=browser_conf) as crawler:
        # 4) Execute the crawl
        result = await crawler.arun(url="https://example.com/news", config=run_conf)

        if result.success:
            print("Extracted content:", result.extracted_content)
        else:
            print("Error:", result.error_message)

if __name__ == "__main__":
    asyncio.run(main())

5. 后续步骤

有关可用参数(包括高级参数)的详细列表,请参阅:

您可以探索以下主题:

  • 自定义挂钩和身份验证(注入 JavaScript 或处理登录表单)。
  • 会话管理(重复使用页面,在多个调用之间保留状态)。
  • 魔法模式或基于身份的爬行(通过模拟用户行为来对抗机器人检测)。
  • 高级缓存(微调读/写缓存模式)。

6. 结论

BrowserConfig、CrawlerRunConfig 和 LLMConfig 为您提供了直接的定义方法:

  • 启动哪个浏览器、如何运行以及需要任何代理或用户代理。
  • 每次抓取应该如何表现——缓存、超时、JavaScript 代码、提取策略等。
  • 使用哪个 LLM 提供程序、API 令牌、自定义端点的温度和基本 URL

将它们一起使用可获得清晰、易于维护的代码,如果需要更专业的行为,请查看参考文档中的高级参数。祝您爬行愉快!


> Feedback