В этом уроке вы узнаете:
- Что такое 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:
Выполните следующие шаги и узнайте, как выполнять веб-скраппинг с помощью Crawl4AI и DeepSeek!
Пререквизиты
Чтобы следовать этому руководству, выполните следующие предварительные условия:
- На вашем компьютере установленPython 3+
- Учетная запись GroqCloud
- Учетная запись Bright Data
Не волнуйтесь, если у вас еще нет учетной записи 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
: Файл для безопасного хранения переменных окружения.
После создания этих файлов и папок структура вашего проекта должна выглядеть следующим образом:
Затем активируйте виртуальную среду в терминале вашей IDE.
В Linux или macOS запустите эту команду:
./env/bin/activate
Аналогично, в Windows выполните команду:
env/Scripts/activate
Отлично! Теперь у вас есть среда Python для веб-скрапинга Crawl4AI с помощью DeepSeek.
Шаг №2: Установите Craw4AI
Активировав виртуальную среду, установите Crawl4AI с помощью пакета crawl4ai
pip:
pip install crawl4ai
Обратите внимание, что библиотека имеет несколько зависимостей, поэтому установка может занять некоторое время.
После установки выполните следующую команду в терминале:
crawl4ai-setup
Процесс:
- Установите или обновите необходимые браузеры Playwright (Chromium, Firefox и т. д.).
- Выполняет проверки на уровне ОС (например, убеждается, что в Linux установлены необходимые системные библиотеки).
- Подтверждает, что ваша среда правильно настроена для веб-ползания.
После выполнения команды вы должны увидеть результат, похожий на этот:
[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 – даже при доступе через обычный браузер:
В данном случае, поскольку валидный контент не был получен, Crawl4AI не смог преобразовать его в Markdown. В следующем шаге мы рассмотрим, как обойти это ограничение. Для дальнейшего чтения ознакомьтесь с нашим руководством по обходу CAPTCHA в Python.
Шаг #6: Настройка API Web Unlocker
Crawl4AI – мощный инструмент со встроенными механизмами обхода ботов. Однако он не может обойти такие высокозащищенные сайты, как G2, где применяются строгие и первоклассные меры по борьбе с ботами и скрапингом.
Для борьбы с такими сайтами лучше всего использовать специальный инструмент, предназначенный для разблокировки любой веб-страницы, независимо от уровня ее защиты. Идеальным продуктом для решения этой задачи является Web Unlocker от Bright Data, API для разблокировки, который:
- Имитирует реальное поведение пользователя, чтобы обойти обнаружение антиботов.
- Автоматическое управление прокси-серверами и решение CAPTCHA
- Масштабируется плавно, не требуя управления инфраструктурой
Следуйте следующим инструкциям, чтобы интегрировать Web Unlocker API в ваш скрепер Crawl4AI DeepSeek.
Кроме того, ознакомьтесь с официальной документацией.
Сначала войдите в свою учетную запись Bright Data или создайте ее, если вы еще этого не сделали. Пополните счет или воспользуйтесь бесплатной пробной версией, доступной для всех продуктов.
Затем перейдите к разделу “Прокси и скраппинг” на панели управления и выберите опцию “разблокировать” в таблице:
В результате вы перейдете на страницу настройки API Web Unlocker, показанную ниже:
Здесь включите Web Unlocker API, нажав на тумблер:
G2 защищен передовыми средствами защиты от ботов, включая 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. Чтобы учесть это, вам следует:
- Увеличьте таймаут загрузки страницы до 3 минут
- Дайте краулеру указание дождаться полной загрузки 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-ключу имя (например, “Crawl4AI Scraping”) и дождитесь проверки антиботом Cloudflare. Затем нажмите “Отправить”, чтобы сгенерировать ключ API:
Скопируйте ключ API и добавьте его в файл .env
, как показано ниже:
LLM_API_TOKEN=<YOUR_GROK_API_KEY>
Замените на фактический ключ API, предоставленный Groq.
Прекрасно! Вы готовы использовать DeepSeek для скраппинга LLM с помощью Crawl4AI.
Шаг #9: Определите схему для ваших данных, полученных в результате сканирования
Crawl4AI выполняет скраппинг LLM, используя подход, основанный на схемах. В данном контексте схема – это структура данных в формате JSON, которая определяет:
- Базовый селектор, определяющий “контейнерный” элемент на странице (например, строка товара, карточка записи в блоге).
- Поля, определяющие селекторы CSS/XPath для захвата каждого элемента данных (например, текста, атрибута, блока HTML).
- Вложенные или списочные типы для повторяющихся или иерархических структур.
Чтобы определить схему, необходимо сначала определить данные, которые нужно извлечь из целевой страницы. Для этого откройте целевую страницу в браузере в режиме инкогнито:
В этом случае предположим, что вас интересуют следующие поля:
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 имеют следующие ограничения на бесплатном тарифном плане:
- До 30 запросов в минуту
- До 1 000 запросов в день
- Не более 6 000 жетонов в минуту
Если первые два ограничения не являются проблемой для данного примера, то последнее представляет собой сложную задачу. Типичная веб-страница может содержать миллионы символов, что означает сотни тысяч лексем.
Другими словами, вы не можете напрямую передать всю страницу G2 в модели DeepSeek через Groq из-за ограничений на количество токенов. Чтобы решить эту проблему, Crawl4AI позволяет выбрать только определенные разделы страницы. Эти разделы, а не вся страница, будут преобразованы в Markdown и переданы в LLM. Процесс выделения разделов опирается на селекторы CSS.
Чтобы определить, какие разделы нужно выбрать, откройте целевую страницу в браузере. Щелкните правой кнопкой мыши на элементах, содержащих интересующие вас данные, и выберите опцию “Инспектировать”:
Здесь вы можете заметить, что элемент .product-head__title
содержит название продукта/компании, оценку отзывов, количество отзывов и заявленный статус.
Теперь осмотрите раздел с логотипом:
Получить эту информацию можно с помощью CSS-селектора .product-head__logo
.
Наконец, просмотрите раздел описания:
Описание доступно с помощью селектора [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:
[](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 выполнит его:
- Подключитесь к целевой веб-странице через API-прокси Web Unlocker.
- Получите HTML-содержимое страницы и отфильтруйте элементы с помощью указанных CSS-селекторов.
- Преобразуйте выбранные элементы HTML в формат Markdown.
- Отправьте отформатированный Markdown в DeepSeek для извлечения данных.
- Дайте команду 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 и протестируйте наши прокси-сервисы и продукты для скрапбукинга бесплатно!
Кредитная карта не требуется