Как создать ИИ-скребок с помощью Crawl4AI и DeepSeek

Научитесь создавать веб-скрепер на базе искусственного интеллекта с помощью Crawl4AI и DeepSeek, используя наше подробное пошаговое руководство.
3 мин. чтения
Web Scraping with Crawl4AI Deepseek and Web Unlocker blog image

В этом уроке вы узнаете:

  • Что такое Crawl4AI и что он предлагает для веб-скрапинга
  • Идеальные сценарии использования Crawl4AI с LLM типа DeepSeek
  • Как построить скрепер Crawl4AI на базе DeepSeek в разделе с руководством.

Давайте погрузимся!

Что такое Craw4AI?

Crawl4AI – это веб-краулер и скрепер с открытым исходным кодом, готовый к работе с искусственным интеллектом и предназначенный для беспрепятственной интеграции с большими языковыми моделями (LLM), агентами искусственного интеллекта и конвейерами данных. Он обеспечивает высокоскоростное извлечение данных в режиме реального времени, при этом отличается гибкостью и простотой развертывания.

Он предлагает следующие функции для веб-скрапинга AI:

  • Создан для магистрантов: Генерирует структурированный Markdown, оптимизированный для генерации с расширенным поиском (RAG) и тонкой настройки.
  • Гибкий контроль над браузером: Поддерживает управление сеансами, прокси и пользовательские крючки.
  • Эвристический интеллект: Использует интеллектуальные алгоритмы для оптимизации разбора данных.
  • Полностью открытый исходный код: Не требуются ключи API; развертывание через Docker и облачные платформы.

Узнайте больше в официальной документации.

Когда использовать Crawl4AI и DeepSeek для веб-скрапинга

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

Используя DeepSeek в Crawl4AI, вы можете извлекать структурированные данные даже из самых сложных и противоречивых веб-страниц. И все это без необходимости использования предопределенной логики парсинга.

Ниже приведены ключевые сценарии, в которых комбинация DeepSeek + Crawl4AI особенно полезна:

  • Частые изменения структуры сайта: Традиционные скреперы ломаются, когда сайты обновляют свою HTML-структуру, но AI динамически адаптируется.
  • Непоследовательные макеты страниц: Такие платформы, как Amazon, имеют различный дизайн страниц товаров. LLM может интеллектуально извлекать данные независимо от различий в макете.
  • Разбор неструктурированного контента: Извлечение информации из обзоров, сообщений в блогах или обсуждений на форумах в свободной форме становится проще благодаря обработке на базе LLM.

Веб-скрапинг с помощью Craw4AI и DeepSeek: Пошаговое руководство

В этом руководстве вы узнаете, как создать веб-скрепер на основе искусственного интеллекта с помощью Crawl4AI. В качестве движка LLM мы будем использовать DeepSeek.

В частности, вы увидите, как создать AI-скребок для извлечения данных со страницы G2 для Bright Data:

Целевая страница G2

Выполните следующие шаги и узнайте, как выполнять веб-скраппинг с помощью Crawl4AI и DeepSeek!

Пререквизиты

Чтобы следовать этому руководству, выполните следующие предварительные условия:

Не волнуйтесь, если у вас еще нет учетной записи GroqCloud или Bright Data. Вы получите инструкции по их настройке во время следующих шагов.

Шаг №1: Настройка проекта

Выполните следующую команду, чтобы создать папку для вашего проекта скраппинга Crawl4AI DeepSeek:

mkdir crawl4ai-deepseek-scraper

Перейдите в папку проекта и создайте виртуальную среду:

cd crawl4ai-deepseek-scraper
python -m venv venv

Теперь загрузите папку crawl4ai-deepseek-scraper в вашу любимую Python IDE. Visual Studio Code с расширением Python или PyCharm Community Edition – два отличных варианта.

Внутри папки проекта создайте:

  • scraper.py: Файл, в котором будет содержаться логика скрапинга, основанная на искусственном интеллекте.
  • models/: Каталог для хранения моделей данных Crawl4AI LLM на основе Pydantic.
  • .env: Файл для безопасного хранения переменных окружения.

После создания этих файлов и папок структура вашего проекта должна выглядеть следующим образом:

Структура файлов скрепера Crawl4AI DeepSeek

Затем активируйте виртуальную среду в терминале вашей IDE.

В Linux или macOS запустите эту команду:

./env/bin/activate

Аналогично, в Windows выполните команду:

env/Scripts/activate

Отлично! Теперь у вас есть среда Python для веб-скрапинга Crawl4AI с помощью DeepSeek.

Шаг №2: Установите Craw4AI

Активировав виртуальную среду, установите Crawl4AI с помощью пакета crawl4ai pip:

pip install crawl4ai

Обратите внимание, что библиотека имеет несколько зависимостей, поэтому установка может занять некоторое время.

После установки выполните следующую команду в терминале:

crawl4ai-setup

Процесс:

  1. Установите или обновите необходимые браузеры Playwright (Chromium, Firefox и т. д.).
  2. Выполняет проверки на уровне ОС (например, убеждается, что в Linux установлены необходимые системные библиотеки).
  3. Подтверждает, что ваша среда правильно настроена для веб-ползания.

После выполнения команды вы должны увидеть результат, похожий на этот:

[INIT].... → Running post-installation setup...
[INIT].... → Installing Playwright browsers...
[COMPLETE] ● Playwright installation completed successfully.
[INIT].... → Starting database initialization...
[COMPLETE] ● Database backup created at: C:\Users\antoz\.crawl4ai\crawl4ai.db.backup_20250219_092341
[INIT].... → Starting database migration...
[COMPLETE] ● Migration completed. 0 records processed.
[COMPLETE] ● Database initialization completed successfully.
[COMPLETE] ● Post-installation setup completed!

Потрясающе! Теперь Crawl4AI установлен и готов к использованию.

Шаг #4: Инициализация scraper.py

Поскольку Crawl4AI требует асинхронного кода, начните с создания базового скрипта asyncio:

import asyncio

async def main():
    # Scraping logic...

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

Помните, что проект предполагает интеграцию со сторонними сервисами вроде DeepSeek. Для их реализации вам понадобятся API-ключи и другие секреты. Мы будем хранить их в файле .env.

Установите python-dotenv для загрузки переменных окружения:

pip install python-dotenv

Перед определением main() загрузите переменные окружения из файла .env с помощью load_dotenv():

load_dotenv()

Импортируйте load_dotenv из библиотеки python-dotenv:

from dotenv import load_dotenv

Отлично! scraper.py готов к использованию логики скрапинга, основанной на искусственном интеллекте.

Шаг #5: Создайте свой первый AI-скребок

Внутри функции main() в scraper.py добавьте следующую логику, используя базовый краулер Crawl4AI:

# Browser configuration
browser_config = BrowserConfig(
    headless=True
)

# Crawler configuration
crawler_config = CrawlerRunConfig(
    cache_mode=CacheMode.BYPASS
)

# Run the AI-powered crawler
async with AsyncWebCrawler(config=browser_config) as crawler:
    result = await crawler.arun(
        url="https://www.g2.com/products/bright-data/reviews",
        config=crawler_config
    )

    # print the first 1000 characters
    print(f"Parsed Markdown data:\n{result.markdown[:1000]}")

В приведенном выше фрагменте ключевыми моментами являются:

  • BrowserConfig: Управляет запуском и поведением браузера, включая такие настройки, как безголовый режим и пользовательские агенты пользователя для веб-скреппинга.
  • CrawlerRunConfig: Определяет поведение краулера, например, стратегию кэширования, правила выбора данных, тайм-ауты и многое другое.
  • headless=True: настраивает браузер на работу в режиме headless безграфического интерфейса для экономии ресурсов.
  • CacheMode.BYPASS: эта конфигурация гарантирует, что краулер будет получать свежий контент непосредственно с сайта, а не полагаться на кэшированные данные.
  • crawler.arun(): Этот метод запускает асинхронный краулер для извлечения данных из указанного URL.
  • result.markdown: Извлеченный контент преобразуется в формат Markdown, что облегчает его разбор и анализ.

Не забудьте добавить следующие импорты:

from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode

На данный момент файл scraper.py должен содержать:

import asyncio
from dotenv import load_dotenv
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode

# Load secrets from .env file
load_dotenv()

async def main():
    # Browser configuration
    browser_config = BrowserConfig(
      headless=True
    )

    # Crawler configuration
    crawler_config = CrawlerRunConfig(
        cache_mode=CacheMode.BYPASS
    )

    # Run the AI-powered crawler
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url="https://www.g2.com/products/bright-data/reviews",
            config=crawler_config
        )

        # print the first 1000 characters
        print(f"Parsed Markdown data:\n{result.markdown[:1000]}")

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

Если вы выполните скрипт, то увидите результат, как показано ниже:

[INIT].... → Crawl4AI 0.4.248
[FETCH]... ↓ https://www.g2.com/products/bright-data/reviews... | Status: True | Time: 0.83s
[SCRAPE].. ◆ Processed https://www.g2.com/products/bright-data/reviews... | Time: 1ms
[COMPLETE] ● https://www.g2.com/products/bright-data/reviews... | Status: True | Total: 0.83s
Parsed Markdown data:

Это подозрительно, поскольку разобранное содержимое Markdown пусто. Чтобы провести дальнейшее расследование, выведите статус ответа:

print(f"Response status code: {result.status_code}")

На этот раз вывод будет включать в себя:

Response status code: 403

Результат парсинга в формате Markdown пуст, потому что запрос Crawl4AI был заблокирован системами обнаружения ботов G2. Об этом свидетельствует код состояния 403 Forbidden, возвращаемый сервером.

Это не должно удивлять, поскольку на G2 действуют строгие меры по борьбе с ботами. В частности, он часто отображает CAPTCHA – даже при доступе через обычный браузер:

Страница G2 CAPTCHA

В данном случае, поскольку валидный контент не был получен, Crawl4AI не смог преобразовать его в Markdown. В следующем шаге мы рассмотрим, как обойти это ограничение. Для дальнейшего чтения ознакомьтесь с нашим руководством по обходу CAPTCHA в Python.

Шаг #6: Настройка API Web Unlocker

Crawl4AI – мощный инструмент со встроенными механизмами обхода ботов. Однако он не может обойти такие высокозащищенные сайты, как G2, где применяются строгие и первоклассные меры по борьбе с ботами и скрапингом.

Для борьбы с такими сайтами лучше всего использовать специальный инструмент, предназначенный для разблокировки любой веб-страницы, независимо от уровня ее защиты. Идеальным продуктом для решения этой задачи является Web Unlocker от Bright Data, API для разблокировки, который:

  • Имитирует реальное поведение пользователя, чтобы обойти обнаружение антиботов.
  • Автоматическое управление прокси-серверами и решение CAPTCHA
  • Масштабируется плавно, не требуя управления инфраструктурой

Следуйте следующим инструкциям, чтобы интегрировать Web Unlocker API в ваш скрепер Crawl4AI DeepSeek.
Кроме того, ознакомьтесь с официальной документацией.

Сначала войдите в свою учетную запись Bright Data или создайте ее, если вы еще этого не сделали. Пополните счет или воспользуйтесь бесплатной пробной версией, доступной для всех продуктов.

Затем перейдите к разделу “Прокси и скраппинг” на панели управления и выберите опцию “разблокировать” в таблице:

Выбор опции "разблокировать" на приборной панели Bright Data

В результате вы перейдете на страницу настройки API Web Unlocker, показанную ниже:

Страница настройки API Web Unlocker

Здесь включите Web Unlocker API, нажав на тумблер:

Теперь тумблер установлен на "Вкл.

G2 защищен передовыми средствами защиты от ботов, включая CAPTCHA. Поэтому убедитесь, что на странице “Конфигурация” включены следующие два тумблера:

Включение опций "Премиум-домены" и "Решатель CAPTCHA"

Crawl4AI работает, перемещаясь по страницам в контролируемом браузере. Он опирается на функцию goto() в Playwright, которая отправляет HTTP GET-запрос на целевую веб-страницу. В отличие от этого, Web Unlocker API работает через POST-запросы.

Это не проблема, поскольку вы по-прежнему можете использовать Web Unlocker API с Crawl4AI, настроив его как прокси. Это позволит браузеру Crawl4AI отправлять запросы через продукт Bright Data, получая обратно незаблокированные HTML-страницы.

Чтобы получить доступ к своим учетным данным прокси Web Unlocker API, перейдите на вкладку “Родной доступ на основе прокси” на странице “Обзор”:

собственный доступ на основе прокси на странице обзора

Скопируйте следующие учетные данные со страницы:

  • <HOST>
  • <PORT>
  • <USERNAME>
  • <ПАРОЛЬ>

Затем используйте их, чтобы заполнить файл .env этими переменными окружения:

PROXY_SERVER=https://<HOST>:<PORT>
PROXY_USERNAME=<USERNAME>
PROXY_PASSWORD=<PASSWORD>

Фантастика! Web Unlocker теперь готов к интеграции с Crawl4AI.

Шаг №7: Интеграция API Web Unlocker

BrowserConfig поддерживает интеграцию с прокси через объект proxy_config. Чтобы интегрировать Web Unlocker API с Crawl4AI, заполните этот объект переменными окружения из вашего .env-файла и передайте его конструктору BrowserConfig:

# Bright Data's Web Unlocker API proxy configuration
proxy_config = {
    "server": os.getenv("PROXY_SERVER"),
    "username": os.getenv("PROXY_USERNAME"),
    "password": os.getenv("PROXY_PASSWORD")
}

# Browser configuration
browser_config = BrowserConfig(
    headless=True,
    proxy_config=proxy_config,
)

Не забудьте импортировать os из стандартной библиотеки Python:

import os

Имейте в виду, что Web Unlocker API влечет за собой некоторые временные издержки, связанные с ротацией IP-адресов через прокси-сервер и последующим решением CAPTCHA. Чтобы учесть это, вам следует:

  1. Увеличьте таймаут загрузки страницы до 3 минут
  2. Дайте краулеру указание дождаться полной загрузки DOM перед его разбором

Достичь этого можно с помощью следующей конфигурации CrawlerRunConfig:

crawler_config = CrawlerRunConfig(
    cache_mode=CacheMode.BYPASS,
    wait_until="domcontentloaded", # wait until the DOM of the page has been loaded
    page_timeout=180000, # wait up to 3 mins for page load
)

Обратите внимание, что даже Web Unlocker API не безупречен при работе со сложными сайтами, такими как G2. В редких случаях API скраппинга может не получить разблокированную страницу, что приведет к завершению работы скрипта со следующей ошибкой:

Error: Failed on navigating ACS-GOTO:                                                 
Page.goto: net::ERR_HTTP_RESPONSE_CODE_FAILURE at https://www.g2.com/products/bright-data/reviews

Будьте уверены, плата взимается только за успешные запросы. Поэтому не нужно беспокоиться о перезапуске скрипта до тех пор, пока он не заработает. В производственном скрипте рассмотрите возможность реализации логики автоматической повторной попытки.

Когда запрос будет выполнен успешно, вы получите результат, подобный этому:

Response status code: 200
Parsed Markdown data:
  * [Home](https://www.g2.com/products/bright-data/</>)
  * [Write a Review](https://www.g2.com/products/bright-data/</wizard/new-review>)
  * Browse
  * [Top Categories](https://www.g2.com/products/bright-data/<#>)
Top Categories
    * [AI Chatbots Software](https://www.g2.com/products/bright-data/<https:/www.g2.com/categories/ai-chatbots>)
    * [CRM Software](https://www.g2.com/products/bright-data/<https:/www.g2.com/categories/crm>)
    * [Project Management Software](https://www.g2.com/products/bright-data/<https:/www.g2.com/categories/project-management>)
    * [Expense Management Software](https://www.g2.com/products/bright-data/<https:/www.g2.com/categories/expense-management>)
    * [Video Conferencing Software](https://www.g2.com/products/bright-data/<https:/www.g2.com/categories/video-conferencing>)
    * [Online Backup Software](https://www.g2.com/products/bright-data/<https:/www.g2.com/categories/online-backup>)
    * [E-Commerce Platforms](https://www.g2.com/products/brig

Потрясающе! На этот раз G2 ответил кодом состояния 200 OK. Это означает, что запрос не был заблокирован, и Crawl4AI смог успешно разобрать HTML в Markdown, как и предполагалось.

Шаг #8: Настройка Groq

GroqCloud – один из немногих провайдеров, поддерживающих ИИ-модели DeepSeek через API, совместимые с OpenAI, даже на бесплатном тарифном плане. Поэтому именно эта платформа будет использоваться для интеграции LLM в Crawl4AI.

Если у вас еще нет учетной записи Groq, создайте ее. В противном случае просто войдите в систему. На панели пользователя перейдите к разделу “Ключи API” в левом меню и нажмите кнопку “Создать ключ API”:

Кнопка "Создать ключ API"

Появится всплывающее окно:

Всплывающее окно "Crate API Key"

Дайте своему API-ключу имя (например, “Crawl4AI Scraping”) и дождитесь проверки антиботом Cloudflare. Затем нажмите “Отправить”, чтобы сгенерировать ключ API:

Ваш ключ API Groq

Скопируйте ключ API и добавьте его в файл .env, как показано ниже:

LLM_API_TOKEN=<YOUR_GROK_API_KEY>

Замените на фактический ключ API, предоставленный Groq.

Прекрасно! Вы готовы использовать DeepSeek для скраппинга LLM с помощью Crawl4AI.

Шаг #9: Определите схему для ваших данных, полученных в результате сканирования

Crawl4AI выполняет скраппинг LLM, используя подход, основанный на схемах. В данном контексте схема – это структура данных в формате JSON, которая определяет:

  1. Базовый селектор, определяющий “контейнерный” элемент на странице (например, строка товара, карточка записи в блоге).
  2. Поля, определяющие селекторы CSS/XPath для захвата каждого элемента данных (например, текста, атрибута, блока HTML).
  3. Вложенные или списочные типы для повторяющихся или иерархических структур.

Чтобы определить схему, необходимо сначала определить данные, которые нужно извлечь из целевой страницы. Для этого откройте целевую страницу в браузере в режиме инкогнито:

Целевая страница на G2

В этом случае предположим, что вас интересуют следующие поля:

  • name: Название продукта/компании.
  • image_url: URL-адрес изображения продукта/компании.
  • описание: Краткое описание продукта/компании.
  • review_score: Средняя оценка отзывов о продукте/компании.
  • number_of_reviews: Общее количество отзывов.
  • заявлен: Булево значение, указывающее, заявлен ли профиль компании владельцем.

Теперь в папке models создайте файл g2_product.py и заполните его классом схемы G2Product, основанным на Pydantic, следующим образом:

# ./models/g2_product.py

from pydantic import BaseModel

class G2Product(BaseModel):
    """
    Represents the data structure of a G2 product/company page.
    """

    name: str
    image_url: str
    description: str
    review_score: str
    number_of_reviews: str
    claimed: bool

Да! Процесс скраппинга LLM, выполняемый DeepSeek, будет возвращать объекты, соответствующие приведенной выше схеме.

Шаг № 10: Подготовка к интеграции DeepSeek

Прежде чем завершить интеграцию DeepSeek с Crawl4AI, просмотрите страницу “Настройки > Лимиты” в вашем аккаунте GroqCloud:

Ограничения на модели DeepSeek из GroqCloud

Там вы увидите, что две доступные модели DeepSeek имеют следующие ограничения на бесплатном тарифном плане:

  1. До 30 запросов в минуту
  2. До 1 000 запросов в день
  3. Не более 6 000 жетонов в минуту

Если первые два ограничения не являются проблемой для данного примера, то последнее представляет собой сложную задачу. Типичная веб-страница может содержать миллионы символов, что означает сотни тысяч лексем.

Другими словами, вы не можете напрямую передать всю страницу G2 в модели DeepSeek через Groq из-за ограничений на количество токенов. Чтобы решить эту проблему, Crawl4AI позволяет выбрать только определенные разделы страницы. Эти разделы, а не вся страница, будут преобразованы в Markdown и переданы в LLM. Процесс выделения разделов опирается на селекторы CSS.

Чтобы определить, какие разделы нужно выбрать, откройте целевую страницу в браузере. Щелкните правой кнопкой мыши на элементах, содержащих интересующие вас данные, и выберите опцию “Инспектировать”:

Заголовок данных о продукте/компании G2

Здесь вы можете заметить, что элемент .product-head__title содержит название продукта/компании, оценку отзывов, количество отзывов и заявленный статус.

Теперь осмотрите раздел с логотипом:

Раздел с логотипом продукта и компании G2

Получить эту информацию можно с помощью CSS-селектора .product-head__logo.

Наконец, просмотрите раздел описания:

Элемент описания продукта/компании G2

Описание доступно с помощью селектора [itemprop="description"].

Настройте эти CSS-селекторы в CrawlerRunConfig следующим образом:

crawler_config = CrawlerRunConfig(
    cache_mode=CacheMode.BYPASS,
    wait_until="domcontentloaded", 
    page_timeout=180000,
    css_selector=".product-head__title, .product-head__logo, [itemprop=\"description\"]", # the CSS selectors of the elements to extract data from
)

Если вы снова запустите scraper.py, то получите что-то вроде:

Response status code: 200
Parsed Markdown data:
[![Bright Data Reviews](https://images.g2crowd.com/uploads/product/image/large_detail/large_detail_9d7645872b9abb68923fb7e2c7c9d834/bright-data.png)![G2 recognized Bright Data](https://images.g2crowd.com/uploads/report_medal_translation/image/3436/medal.svg)](https:/www.g2.com/products/bright-data/reviews)
[Editedit](https:/my.g2.com/bright-data/product_information)
[Bright Data](https:/www.g2.com/products/bright-data/reviews)
By [bright data](https:/www.g2.com/sellers/bright-data)
Show rating breakdown
4.7 out of 5 stars
[5 star78%](https:/www.g2.com/products/bright-data/reviews?filters%5Bnps_score%5D%5B%5D=5#reviews)
[4 star19%](https:/www.g2.c

Вместо всей HTML-страницы в вывод попадают только соответствующие разделы. Такой подход значительно сокращает использование токенов, позволяя вам не выходить за пределы свободного уровня Groq и при этом эффективно извлекать интересующие вас данные!

Шаг № 11: Определите стратегию извлечения LLM на основе DeepSeek

Craw4AI поддерживает извлечение данных на основе LLM с помощью объекта LLMExtractionStrategy. Вы можете определить одну из них для интеграции с DeepSeek, как показано ниже:

extraction_strategy = LLMExtractionStrategy(
    provider=os.getenv("LLM_MODEL"),
    api_token=os.getenv("LLM_API_TOKEN"),
    schema=G2Product.model_json_schema(),
    extraction_type="schema",
    instruction=(
        "Extract the 'name', 'description', 'image_url', 'review_score', and 'number_of_reviews' "
        "from the content below. "
        "'review_score' must be in \"x/5\" format. Get the entire description, not just the first few sentences."
    ),
    input_format="markdown",
    verbose=True
)

Чтобы указать модель LLM, добавьте следующую переменную окружения в .env:

LLM_MODEL=groq/deepseek-r1-distill-llama-70b

Это указывает Craw4AI использовать модель deepseek-r1-distill-llama-70b из GroqCloud для извлечения данных на основе LLM.

В файле scraper.py импортируйте LLMExtractionStrategy и G2Product:

from crawl4ai.extraction_strategy import LLMExtractionStrategy
from models.g2_product import G2Product

Затем передайте объект extraction_strategy в crawler_config:

crawler_config = CrawlerRunConfig(
    cache_mode=CacheMode.BYPASS,
    wait_until="domcontentloaded",
    page_timeout=180000, # 3 mins
    css_selector=".product-head__title, .product-head__logo, [itemprop=\"description\"]",
    extraction_strategy=extraction_strategy
)

Когда вы запустите скрипт, Craw4AI выполнит его:

  1. Подключитесь к целевой веб-странице через API-прокси Web Unlocker.
  2. Получите HTML-содержимое страницы и отфильтруйте элементы с помощью указанных CSS-селекторов.
  3. Преобразуйте выбранные элементы HTML в формат Markdown.
  4. Отправьте отформатированный Markdown в DeepSeek для извлечения данных.
  5. Дайте команду DeepSeek обработать введенные данные в соответствии с предоставленным запросом(инструкцией) и вернуть извлеченные данные.

Запустив crawler.arun(), вы можете проверить использование токена:

print(extraction_strategy.show_usage())

Затем можно получить доступ к извлеченным данным и распечатать их:

result_raw_data = result.extracted_content
print(result_raw_data)

Если вы выполните сценарий и выведете результаты, то увидите примерно такой результат:

=== Token Usage Summary ===
Type                   Count
------------------------------
Completion               525
Prompt                 2,002
Total                  2,527

=== Usage History ===
Request #    Completion       Prompt        Total
------------------------------------------------
1                   525        2,002        2,527
None
[
    {
        "name": "Bright Data",
        "image_url": "https://images.g2crowd.com/uploads/product/image/large_detail/large_detail_9d7645872b9abb68923fb7e2c07c9d834/bright-data.png",
        "description": "Bright Data is the world's #1 web data, proxies, & data scraping solutions platform. Fortune 500 companies, academic institutions and small businesses all rely on Bright Data's products, network and solutions to retrieve crucial public web data in the most efficient, reliable and flexible manner, so they can research, monitor, analyze data and make better informed decisions. Bright Data is used worldwide by 20,000+ customers in nearly every industry. Its products range from no-code data solutions utilized by business owners, to a robust proxy and scraping infrastructure used by developers and IT professionals. Bright Data products stand out because they provide a cost-effective way to perform fast and stable public web data collection at scale, effortless conversion of unstructured data into structured data and superior customer experience, while being fully transparent and compliant.",
        "review_score": "4.7/5",
        "number_of_reviews": "221",
        "claimed": true
    }
]

Первая часть результатов (использование токенов) получена с помощью функции show_usage(), подтверждающей, что мы находимся ниже лимита в 6000 токенов. Следующие результирующие данные представляют собой JSON-строку, соответствующую схеме G2Product.

Просто невероятно!

Шаг #12: Работа с данными о результатах

Как видно из результатов предыдущего шага, DeepSeek обычно возвращает массив, а не один объект. Чтобы справиться с этим, разберите возвращаемые данные как JSON и извлеките первый элемент из массива:

# Parse the extracted data from JSON
result_data = json.loads(result.extracted_content)

# If the returned data is an array, access its first element
if result_data:
    result_data = result_data[0]

Не забудьте импортировать json из стандартной библиотеки Python:

import json

На этом этапе result_data должен быть экземпляром G2Product. Последний шаг – экспорт этих данных в JSON-файл.

Шаг № 13: Экспорт собранных данных в JSON

Используйте json для экспорта данных результатов в файл g2.json:

with open("g2.json", "w", encoding="utf-8") as f:
    json.dump(result_data, f, indent=4)

Миссия выполнена!

Шаг №14: Соберите все вместе

Ваш окончательный файл scraper.py должен содержать:

import asyncio
from dotenv import load_dotenv
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
import os
from crawl4ai.extraction_strategy import LLMExtractionStrategy
from models.g2_product import G2Product
import json

# Load secrets from .env file
load_dotenv()

async def main():
    # Bright Data's Web Unlocker API proxy configuration
    proxy_config = {
        "server": os.getenv("PROXY_SERVER"),
        "username": os.getenv("PROXY_USERNAME"),
        "password": os.getenv("PROXY_PASSWORD")
    }

    # Browser configuration
    browser_config = BrowserConfig(
        headless=True,
        proxy_config=proxy_config,
    )

    # LLM extraction strategy for data extraction using DeepSeek
    extraction_strategy = LLMExtractionStrategy(
        provider=os.getenv("LLM_MODEL"),
        api_token=os.getenv("LLM_API_TOKEN"),
        schema=G2Product.model_json_schema(),
        extraction_type="schema",
        instruction=(
            "Extract the 'name', 'description', 'image_url', 'review_score', and 'number_of_reviews' "
            "from the content below. "
            "'review_score' must be in \"x/5\" format. Get the entire description, not just the first few sentences."
        ),
        input_format="markdown",
        verbose=True
    )

    # Crawler configuration
    crawler_config = CrawlerRunConfig(
        cache_mode=CacheMode.BYPASS,
        wait_until="domcontentloaded",
        page_timeout=180000, # 3 mins
        css_selector=".product-head__title, .product-head__logo, [itemprop=\"description\"]",
        extraction_strategy=extraction_strategy
    )

    # Run the AI-powered crawler
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url="https://www.g2.com/products/bright-data/reviews",
            config=crawler_config
        )

        # Log the AI model usage info
        print(extraction_strategy.show_usage())

        # Parse the extracted data from JSON
        result_data = json.loads(result.extracted_content)

        # If the returned data is an array, access its first element
        if result_data:
            result_data = result_data[0]

    # Export the scraped data to JSON
    with open("g2.json", "w", encoding="utf-8") as f:
        json.dump(result_data, f, indent=4)

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

Затем в файле models/g2_product.py будет храниться:

from pydantic import BaseModel

class G2Product(BaseModel):
    """
    Represents the data structure of a G2 product/company page.
    """

    name: str
    image_url: str
    description: str
    review_score: str
    number_of_reviews: str
    claimed: bool

И .env будет иметь:

PROXY_SERVER=https://<WEB_UNLOCKER_API_HOST>:<WEB_UNLOCKER_API_PORT>
PROXY_USERNAME=<WEB_UNLOCKER_API_USERNAME>
PROXY_PASSWORD=<WEB_UNLOCKER_API_PASSWORD>
LLM_API_TOKEN=<GROQ_API_KEY>
LLM_MODEL=groq/deepseek-r1-distill-llama-70b

Запустите скребок DeepSeek Crawl4AI с помощью:

python scraper.py

Вывод в терминале будет выглядеть примерно так:

[INIT].... → Crawl4AI 0.4.248
[FETCH]... ↓ https://www.g2.com/products/bright-data/reviews... | Status: True | Time: 56.13s
[SCRAPE].. ◆ Processed https://www.g2.com/products/bright-data/reviews... | Time: 397ms
[LOG] Call LLM for https://www.g2.com/products/bright-data/reviews - block index: 0
[LOG] Extracted 1 blocks from URL: https://www.g2.com/products/bright-data/reviews block index: 0
[EXTRACT]. ■ Completed for https://www.g2.com/products/bright-data/reviews... | Time: 12.273853100006818s
[COMPLETE] ● https://www.g2.com/products/bright-data/reviews... | Status: True | Total: 68.81s

=== Token Usage Summary ===
Type                   Count
------------------------------
Completion               524
Prompt                 2,002
Total                  2,526

=== Usage History ===
Request #    Completion       Prompt        Total
------------------------------------------------
1                   524        2,002        2,526
None

Кроме того, в папке вашего проекта появится файл g2.json. Откройте его, и вы увидите:

{
    "name": "Bright Data",
    "image_url": "https://images.g2crowd.com/uploads/product/image/large_detail/large_detail_9d7645872b9abb68923fb7e2c7c9d834/bright-data.png",
    "description": "Bright Data is the world's #1 web data, proxies, & data scraping solutions platform. Fortune 500 companies, academic institutions and small businesses all rely on Bright Data's products, network and solutions to retrieve crucial public web data in the most efficient, reliable and flexible manner, so they can research, monitor, analyze data and make better informed decisions. Bright Data is used worldwide by 20,000+ customers in nearly every industry. Its products range from no-code data solutions utilized by business owners, to a robust proxy and scraping infrastructure used by developers and IT professionals. Bright Data products stand out because they provide a cost-effective way to perform fast and stable public web data collection at scale, effortless conversion of unstructured data into structured data and superior customer experience, while being fully transparent and compliant.",
    "review_score": "4.7/5",
    "number_of_reviews": "221",
    "claimed": true
}

Поздравляем! Вы начали с защищенной от ботов страницы G2 и использовали Crawl4AI, DeepSeek и Web Unlocker API для извлечения из нее структурированных данных, не написав ни строчки логики парсинга.

Заключение

В этом уроке вы узнали, что такое Crawl4AI и как использовать его в сочетании с DeepSeek для создания скрепера, работающего на основе искусственного интеллекта. Одной из основных проблем при скраппинге является риск быть заблокированным, но эта проблема была решена с помощью API Web Unlocker от Bright Data.

Как показано в этом руководстве, с помощью комбинации Crawl4AI, DeepSeek и Web Unlocker API можно извлекать данные с любого сайта – даже с таких защищенных, как G2, – без необходимости использования специальной логики парсинга. Это лишь один из многих сценариев, поддерживаемых продуктами и услугами Bright Data, которые помогут вам реализовать эффективный веб-скрепинг на основе искусственного интеллекта.

Ознакомьтесь с другими нашими инструментами для веб-скреппинга, которые интегрируются с Crawl4AI:

  • Услуги прокси: 4 различных типа прокси-серверов для обхода ограничений по местоположению, включая 72 миллиона IP-адресов жителей.
  • API для веб-скреперов: Специальные конечные точки для извлечения свежих структурированных веб-данных из более чем 100 популярных доменов.
  • SERP API: API для обработки всех текущих операций по разблокировке SERP и извлечению одной страницы
  • Браузер для скраппинга: Браузер, совместимый с Puppeteer, Selenium и Playwright, со встроенными функциями разблокировки

Зарегистрируйтесь на сайте Bright Data и протестируйте наши прокси-сервисы и продукты для скрапбукинга бесплатно!

Кредитная карта не требуется