<НА ГЛАВНУЮ

Асинхронный веб-скрейпинг с Crawl4AI: Эффективный сбор данных для LLM

Узнайте, как использовать Crawl4AI для эффективного асинхронного сбора веб-данных без запуска браузера, идеально подходящего для LLM и масштабируемых решений.

Использование Crawl4AI для асинхронного извлечения веб-данных

Crawl4AI — современный веб-краулер на Python, который позволяет асинхронно и эффективно извлекать структурированные данные. В этом руководстве показано, как использовать Crawl4AI в Google Colab для парсинга страниц без использования тяжелых безголовых браузеров. Благодаря asyncio для параллелизма, httpx для HTTP-запросов и AsyncHTTPCrawlerStrategy из Crawl4AI можно обрабатывать сложный HTML через JsonCssExtractionStrategy и получать чистые JSON-данные.

Установка зависимостей

Для начала установите необходимые пакеты:

!pip install -U crawl4ai httpx

Это установит Crawl4AI и HTTPX — высокопроизводительный HTTP-клиент, позволяющий выполнять легковесный асинхронный веб-скрейпинг прямо в ноутбуке.

Импорт необходимых модулей

Импортируем асинхронные модули Python и компоненты Crawl4AI:

import asyncio, json, pandas as pd
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, HTTPCrawlerConfig
from crawl4ai.async_crawler_strategy import AsyncHTTPCrawlerStrategy
from crawl4ai.extraction_strategy import JsonCssExtractionStrategy

Эти модули отвечают за параллельность, разбор JSON, хранение данных и настройку краулинга.

Настройка HTTP-краулера

Задаем конфигурацию HTTP-запросов для оптимизации краулинга:

http_cfg = HTTPCrawlerConfig(
    method="GET",
    headers={
        "User-Agent":      "crawl4ai-bot/1.0",
        "Accept-Encoding": "gzip, deflate"
    },
    follow_redirects=True,
    verify_ssl=True
)
crawler_strategy = AsyncHTTPCrawlerStrategy(browser_config=http_cfg)

Эта конфигурация задает GET-запросы с поддержкой gzip/deflate, пользовательским агентом, автоматическим перенаправлением и проверкой SSL, без запуска браузера.

Определение схемы извлечения

Создаем JSON-CSS схему, которая сопоставляет структуру HTML с JSON-полями:

schema = {
    "name": "Quotes",
    "baseSelector": "div.quote",
    "fields": [
        {"name": "quote",  "selector": "span.text",      "type": "text"},
        {"name": "author", "selector": "small.author",   "type": "text"},
        {"name": "tags",   "selector": "div.tags a.tag", "type": "text"}
    ]
}
extraction_strategy = JsonCssExtractionStrategy(schema, verbose=False)
run_cfg = CrawlerRunConfig(extraction_strategy=extraction_strategy)

Эта схема выбирает блоки цитат и извлекает текст цитаты, автора и теги.

Асинхронная функция краулинга

Определяем асинхронную функцию для обхода страниц и сбора данных:

async def crawl_quotes_http(max_pages=5):
    all_items = []
    async with AsyncWebCrawler(crawler_strategy=crawler_strategy) as crawler:
        for p in range(1, max_pages+1):
            url = f"https://quotes.toscrape.com/page/{p}/"
            try:
                res = await crawler.arun(url=url, config=run_cfg)
            except Exception as e:
                print(f" Page {p} failed outright: {e}")
                continue
 
            if not res.extracted_content:
                print(f" Page {p} returned no content, skipping")
                continue
 
            try:
                items = json.loads(res.extracted_content)
            except Exception as e:
                print(f" Page {p} JSON‑parse error: {e}")
                continue
 
            print(f" Page {p}: {len(items)} quotes")
            all_items.extend(items)
 
    return pd.DataFrame(all_items)

Функция асинхронно загружает страницы, аккуратно обрабатывает ошибки, парсит JSON и собирает результаты в DataFrame pandas.

Запуск краулера и просмотр результатов

Запускаем краулер и выводим первые записи:

df = asyncio.get_event_loop().run_until_complete(crawl_quotes_http(max_pages=3))
df.head()

Это выполняет сбор данных с трех страниц и показывает первые строки таблицы.

Преимущества Crawl4AI

Унифицированный API Crawl4AI позволяет легко переключаться между браузерным и HTTP-режимами без изменения логики извлечения. Встроенная обработка ошибок и декларативные схемы делают его масштабируемым и удобным для ETЛ-процессов, анализа данных и подачи чистых структурированных данных в LLM. Легковесная HTTP-стратегия улучшает производительность и экономит ресурсы по сравнению с безголовыми браузерами.

Такой подход позволяет быстро создавать автоматизированные пайплайны для извлечения данных прямо в ноутбуках, что идеально подходит для ML и инженерии данных.

🇬🇧

Switch Language

Read this article in English

Switch to English