Большинство туториалов по "gemini web scraping" написаны так, будто их целевая аудитория — один и тот же человек: Python-разработчик, у которого уже настроено виртуальное окружение, есть Pydantic-схема и твёрдое мнение о библиотеках для async. Если это про тебя — отлично, до кода мы тоже дойдём. Но если ты работаешь в sales, marketing или ecommerce operations и просто хочешь получить структурированные данные с нескольких веб-страниц, не разбираясь, что делает markdownify, ты точно не один.
Gemini — это мультимодальное семейство ИИ-моделей Google, и оно быстро становится одним из основных инструментов для извлечения веб-данных. Согласно опросу Stack Overflow Developer Survey 2025, 84% разработчиков уже используют или планируют использовать ИИ-инструменты — и LLM-scraping занимает в этом тренде заметное место. Но между эффектной демо-версией на одном URL и рабочим пайплайном, который выдерживает пагинацию, подстраницы, антибот-защиту и грязный HTML в больших объёмах, — огромная разница. В этом гайде мы разберём и Python-подход (код), и no-code вариант, сравним модели с реальной математикой токенов, покажем, как скрапить многостраничные сайты (тот самый шаг, который почти всегда пропускают), и честно обсудим, где Gemini-scraping ломается. В конце ты поймёшь, какой путь подходит именно твоему процессу — и как избежать типичных ошибок, на которых спотыкаются и разработчики, и бизнес-пользователи.
Что такое Gemini Web Scraping?
Gemini web scraping — это когда ты передаёшь содержимое веб-страницы — HTML, Markdown или даже скриншот — одной из моделей Gemini от Google, а она интерпретирует страницу и возвращает структурированные данные. Никаких CSS-селекторов. Никакого XPath. Никаких хрупких правил, которые ломаются при первом редизайне сайта.
Базовый процесс выглядит так:
- Получить страницу (
requests, headless-браузер или расширение Chrome) - Очистить и преобразовать контент (обычно HTML → Markdown, чтобы сократить расход токенов)
- Отправить в Gemini вместе со схемой полей, которые тебе нужны
- Получить обратно структурированный JSON — готовый для таблицы, CRM или базы данных
Если сравнить это с классическим скрапингом через BeautifulSoup или Selenium, где ты вручную прописываешь селекторы вроде div.product-title > span.price и молишься, чтобы сайт не изменил верстку во вторник, разница очевидна. Gemini читает страницу как человек: понимает контекст, адаптируется к изменениям макета и справляется с неаккуратной версткой без специальных правил.
И ещё один важный момент: Gemini изначально мультимодален. Он обрабатывает текст, изображения, видео, аудио, PDF и код в одном запросе. Это открывает дополнительные сценарии скрапинга — например, отправку скриншота вместо HTML, — с которыми большинство других LLM просто не справляются. К этому мы ещё вернёмся.
Почему Gemini Web Scraping важен для бизнес-команд
Если тебе интересно, зачем marketing-менеджеру или ecommerce-аналитику вообще думать про LLM и веб-скрапинг, ответ короткий: это экономит огромное количество времени и не ломается каждый раз, когда сайт обновляется.
Рынок программ для веб-скрапинга, по прогнозам, вырастет примерно с $1 млрд в 2025 году до более чем $2 млрд к 2030-му — и именно извлечение данных с помощью ИИ растёт быстрее всего. Это не хайп, а отражение реального изменения в том, как команды собирают данные.
Вот где Gemini-scraping полезен в повседневных бизнес-процессах:
| Сценарий | Что скрапим | Кому полезно |
|---|---|---|
| Генерация лидов | Контактные данные из каталогов, LinkedIn (публичные данные), сайтов компаний | Sales, BDR |
| Мониторинг цен конкурентов | Цены, наличие, акции | Ecommerce, pricing-команды |
| Извлечение каталога товаров | Названия, характеристики, изображения, отзывы | Merchandising, marketplace-operations |
| Объявления о недвижимости | Описание объекта, цены, данные агента | Риелторы, инвесторы |
| Сбор контента | Новости, статьи, упоминания в соцсетях | Marketing, PR |
| Анализ рынка вакансий | Должности, зарплаты, локации | HR, recruiting |
Практическая выгода здесь двойная. Во-первых, ты избегаешь бесконечного цикла написания, тестирования и отладки парсеров — модель каждый раз читает страницу заново. Во-вторых, тебе не нужно нанимать разработчика каждый раз, когда сайт сдвигает один <div>. Бесплатный тариф Gemini делает эксперименты почти бесплатными для небольших задач: примерно 1,000 запросов в день на Flash-Lite и 100 в день на Pro, без привязки банковской карты.
Какую модель Gemini выбрать? (Flash Lite vs. Flash vs. Pro)
Для скрапинга не все модели Gemini одинаково полезны. Это та практическая таблица, которую я хотел бы видеть в каждом туториале, потому что неправильный выбор либо сожжёт бюджет, либо даст мусор на выходе.
Все три актуальные модели Gemini 2.5 имеют контекстное окно 1,048,576 токенов и поддерживают мультимодальность. Разница — в стоимости, скорости и качестве работы со сложными схемами.
| Модель | Цена входа (за 1 млн токенов) | Цена выхода (за 1 млн токенов) | Лучше всего подходит для | Точность на сложных схемах | Скорость |
|---|---|---|---|---|---|
| Gemini 2.5 Flash Lite | ~$0.025 | ~$0.10 | Простые плоские данные, большой объём | ⚠️ Плохо справляется с вложенными/необязательными полями | Самая быстрая |
| Gemini 2.5 Flash | ~$0.075 | ~$0.625 | Большинство задач по скрапингу | ✅ Хорошо для структурированного извлечения | Быстрая |
| Gemini 2.5 Pro | ~$0.3125 | ~$2.50 | Сложные вложенные схемы, пограничные случаи | ✅ Максимальная точность | Самая медленная |
(Цены взяты из Gemini Developer API. Через Batch API — скидка 50%.)
Gemini 2.5 Flash Lite: быстро и дёшево, но следи за пробелами
Flash Lite — это бюджетный вариант. Он отлично подходит для простых плоских данных — названий товаров, цен, списков без глубокой вложенности — при большом объёме. Но у него есть документированные проблемы с необязательными полями, временными метками и вложенными данными. Один разработчик на форуме Google сообщал, что Flash Lite "сходит с ума", когда схема содержит необязательные свойства: модель начинает выдавать повторяющийся текст, пока не упрётся в лимит токенов. Если в твоей схеме больше двух уровней вложенности или есть поля, которых может не быть на некоторых страницах, Flash Lite быстро сожжёт и токены, и твоё терпение.
Gemini 2.5 Flash: золотая середина для большинства задач
Flash — это мой первый выбор почти для любой реальной задачи по скрапингу. Он хорошо справляется со структурированным извлечением, умеет работать с логикой пагинации и стоит примерно в 3 раза дороже Flash Lite на входе — но прирост точности это полностью оправдывает. По бенчмаркам уровня GPQA Flash всего на несколько пунктов отстаёт от Pro, а значит, он отлично справляется с задачами, где нужно интерпретировать, нормализовать и упрощать данные — то есть именно с тем, что и требуется при скрапинге.
Gemini 2.5 Pro: максимальная точность для сложных данных
Pro — это инструмент для точной работы. Используй его, когда ты извлекаешь глубоко вложенные схемы (например, характеристики товаров с несколькими вариантами, где у каждого варианта есть размеры, цвета и цены), или когда недопустимы вымышленные поля (юридические, финансовые, медицинские данные). Он примерно в 12 раз дороже Flash Lite на входе, так что его стоит оставлять для задач, где важнее точность, чем цена.
Пример расчёта стоимости: 10,000 страниц товаров
Если предварительно преобразовать HTML в Markdown, как и следует делать, обычная страница товара сокращается примерно с ~20,000 токенов сырого HTML до ~4,000 токенов Markdown. JSON-ответ — около 500 токенов на страницу.
| Модель | Стоимость входа (40 млн токенов) | Стоимость выхода (5 млн токенов) | Итого за 10K страниц |
|---|---|---|---|
| Flash Lite | $1.00 | $0.50 | ~$1.50 |
| Flash | $3.00 | $3.13 | ~$6.13 |
| Pro | $12.50 | $12.50 | ~$25.00 |
Если не делать предварительную очистку и отправлять сырой HTML (~200 млн токенов на вход), цифры вырастут в 4–5 раз. Предобработка — это самая сильная оптимизация во всём пайплайне.
Код или no-code: два пути к Gemini Web Scraping
Здесь начинается развилка. Если ты разработчик и строишь собственный пайплайн, связка Python + Gemini API даёт максимальный контроль. Если ты бизнес-пользователь, которому нужны данные прямо сейчас и не хочется открывать терминал, no-code AI-scraper даст результат быстрее.
| Критерий | Gemini API (Python) | Thunderbit (без кода) |
|---|---|---|
| Время настройки | 15–30 мин (окружение, ключи, библиотеки) | < 1 мин (установка расширения Chrome) |
| Нужен код | Да (Python, Pydantic) | Нет |
| Работа с пагинацией | Ручной скрипт | Встроено (клик или бесконечный скролл) |
| Обогащение подстраниц | Свой код под каждый сайт | В 1 клик через "Scrape Subpages" |
| Управление стоимостью токенов | Вручную (очистка HTML, выбор модели) | На стороне ИИ-движка |
| Экспорт | JSON/CSV через скрипт | Excel, Google Sheets, Airtable, Notion |
| Лучше всего для | Разработчиков, строящих кастомные пайплайны | Бизнес-пользователей, которым нужны данные сразу |
Thunderbit — это no-code вариант, который мы сделали в Thunderbit: расширение Chrome, использующее ИИ (внутри — Gemini, ChatGPT, Claude и другие модели), чтобы автоматически предложить поля, собрать данные в два клика и экспортировать их в нужный инструмент. Ниже я покажу оба подхода.
Для тех, кто работает прежде всего с таблицами, есть ещё один интересный вариант — Quadratic, ИИ-таблица, которая умеет запускать Gemini-scraping прямо внутри листа. Но для сценариев, которые начинаются с конкретной веб-страницы (каталог товаров, справочник, база лидов), Thunderbit лучше совпадает с ментальной моделью пользователя.
Пошагово: Gemini Web Scraping на Python
Этот раздел — для разработчиков. Если тебе нужен no-code путь, можешь перейти дальше.
Перед началом:
- Сложность: Средняя (нужен опыт работы с Python)
- Время: ~20–30 минут на первый скрапинг
- Что понадобится: Python 3.10+, аккаунт Google AI Studio (бесплатный), целевой URL
Шаг 1: Настрой Python-окружение и API-ключ Gemini
Создай папку проекта и виртуальное окружение, затем установи нужные библиотеки:
mkdir gemini-scraper && cd gemini-scraper
python -m venv venv && source venv/bin/activate
pip install -U google-genai requests beautifulsoup4 markdownify pydantic
Важно: в 2026 году корректный SDK — только google-genai. Старый пакет google-generativeai завершил жизненный цикл 2025-11-30 и теперь считается устаревшим. Если в туториале ты видишь import google.generativeai as genai, этот код уже неактуален.
Дальше получи API-ключ в Google AI Studio. Нажми "Get API Key", создай новый ключ и сохрани его как переменную окружения:
export GEMINI_API_KEY="your-key-here"
Теперь у тебя должно быть рабочее Python-окружение со всеми зависимостями и готовый API-ключ.
Шаг 2: Получи HTML целевой страницы
Используй requests, чтобы забрать страницу. В качестве примера возьмём страницу товара:
import requests
url = "https://example.com/product/widget-pro"
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
html = response.text
Если сайт активно рендерит контент через JavaScript или защищён антиботом, requests.get() может вернуть пустую оболочку или ошибку 403. Мы разберём обходные варианты в разделе с ограничениями — но для многих публичных сайтов этого вполне достаточно.
Шаг 3: Очисти HTML и преобразуй его в Markdown
Это шаг, который почти все упоминают, но редко измеряют. Сырой HTML обычной страницы товара занимает около 20,000 токенов. После очистки через BeautifulSoup и преобразования в Markdown остаётся примерно 765–4,000 токенов — сокращение в 5–10 раз, которое реально экономит деньги и снижает риск галлюцинаций.
from bs4 import BeautifulSoup
from markdownify import markdownify
soup = BeautifulSoup(html, "html.parser")
main = soup.select_one("main") or soup # берём только основной контент
markdown_content = markdownify(str(main))
Вызов select_one("main") убирает шапку, футер, навигацию и скрипты — весь шум, который тратит токены и сбивает модель. Если сайт не использует тег <main>, попробуй .product-detail, #content или любой другой контейнер, в котором лежат реальные данные.
После этого шага у тебя должна остаться чистая Markdown-строка только с содержимым страницы.
Шаг 4: Определи схему данных и отправь запрос в Gemini
Используй Pydantic, чтобы описать, что именно ты хочешь получить обратно. SDK google-genai принимает Pydantic BaseModel напрямую как response_schema:
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
name: str
price: str
sku: str | None = None
description: str
sizes: list[str] = []
colors: list[str] = []
client = genai.Client() # читает GEMINI_API_KEY из переменных окружения
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Extract product details from this page:\n\n{markdown_content}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
product = response.parsed
print(product)
Несколько подводных камней из официального списка багов:
- Не используй
Field(default=...)в схемах, которые отправляешь в Gemini — API вернётValueError. Вместо этого задавай тип на уровне поля, напримерsku: str | None = None. - Не делай слишком глубокую вложенность (максимум 3 уровня). Сильно вложенные схемы заставляют Flash и Flash Lite выдавать рекурсивный вывод или незакрытые скобки.
- Помечай поля как обязательные при работе с Flash Lite и используй пустые строки-заглушки вместо отсутствия поля — у Flash Lite обработка необязательных полей ненадёжна.
После этого у тебя должен получиться разобранный объект Product со структурированными данными со страницы.
Шаг 5: Экспортируй и сохрани данные
Сохрани результат в JSON или CSV:
import json
with open("products.json", "w") as f:
json.dump(product.model_dump(), f, indent=2)
Если хочешь отправить данные в Google Sheets, можно использовать библиотеку gspread. Для баз данных — сериализовать в ORM по твоему выбору. Структурированный вывод Gemini достаточно чистый, чтобы сразу идти в большинство downstream-инструментов.
Пошагово: Gemini Web Scraping без кода (через Thunderbit)
Это путь для бизнес-пользователей — или разработчиков, которые не хотят писать одноразовые скрапинг-скрипты.
Перед началом:
- Сложность: Начальный уровень
- Время: ~5 минут на первый скрапинг
- Что понадобится: Браузер Chrome, расширение Thunderbit (бесплатный тариф работает)
Шаг 1: Установи расширение Thunderbit для Chrome
Перейди в Chrome Web Store и нажми "Add to Chrome". Зарегистрируйся по email — весь процесс занимает меньше минуты. Сравни это с 15–30 минутами настройки Python выше.
Шаг 2: Открой нужную страницу и нажми "AI Suggest Fields"
Открой сайт, который хочешь скрапить: каталог товаров, справочник недвижимости, базу лидов — что угодно. Нажми иконку Thunderbit в панели браузера, затем выбери "AI Suggest Fields."
ИИ в Thunderbit прочитает страницу и автоматически предложит названия колонок и типы данных — например, "Product Name", "Price", "Rating", "Image URL". Ты можешь переименовать колонки, удалить ненужные поля или добавить для каждой колонки собственный AI-пrompt (например, "categorize as High/Medium/Low" или "translate to English").
Перед тем как скрапить хоть одну строку, ты увидишь предпросмотр таблицы с настроенными колонками.
Шаг 3: Нажми "Scrape" и проверь результат
Один клик. Thunderbit сам обрабатывает пагинацию — как кнопки "Next", так и бесконечный скролл — и извлекает данные в структурированную таблицу. Доступны два режима:
- Cloud Scraping: быстрее, обрабатывает до 50 страниц одновременно. Подходит для публичных сайтов.
- Browser Scraping: работает в твоей авторизованной вкладке браузера. Используй его для сайтов с логином (CRM, закрытые каталоги, внутренние инструменты).
Результаты появляются прямо в таблице на боковой панели расширения. Перед экспортом проверь их на очевидные ошибки.
Шаг 4: Экспортируй в Excel, Google Sheets, Airtable или Notion
Нажми кнопку экспорта и выбери формат. Thunderbit умеет экспортировать в Excel, Google Sheets, Airtable и Notion — бесплатно, без платного барьера. Изображения напрямую загружаются в библиотеки изображений Notion и Airtable, что особенно удобно при скрапинге фото товаров или портретов.
Никакого JSON-parsing. Никакого кода. Данные готовы к использованию сразу.
Многостраничный и подстраничный скрапинг с Gemini
Большинство туториалов заканчиваются на одном URL. В реальных задачах всё только начинается.
Скрапинг 500 страниц товаров с пагинацией и детальными подстраницами — это уже полноценная задача, и разница между демо на одном URL и рабочим процессом огромна.
Как обрабатывать пагинацию через Gemini API (подход с кодом)
Для URL с нумерацией страниц (самый распространённый вариант) просто проходи по страницам, пока не получишь пустой результат:
import time
all_products = []
for page in range(1, 101): # до 100 страниц
url = f"https://example.com/products?page={page}"
md = fetch_clean(url) # ваша функция HTML→Markdown из предыдущего шага
response = client.models.generate_content(
model="gemini-2.5-flash-lite", # дешёвый вариант для листингов
contents=f"Extract product names and URLs:\n\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=list[ListingItem],
),
)
items = response.parsed
if not items:
break
all_products.extend(items)
time.sleep(4) # соблюдай лимиты бесплатного тарифа
Для сайтов с курсором или бесконечным скроллом нужно перехватить XHR-endpoint, который вызывает фронтенд (проверь вкладку Network в браузере), и циклично обращаться к нему напрямую. Это дешевле, чем заново рендерить страницу, а через Gemini отправляй данные только тогда, когда поля нужно дополнительно очистить или нормализовать.
Следи за стоимостью токенов: каждая страница умножает расходы. Для простых листингов используй Flash Lite, а Flash подключай только для извлечения детальных данных.
Скрапинг подстраниц для более богатых данных (подход с кодом)
Классический двухэтапный сценарий: этап 1 собирает URL со страницы-списка, этап 2 заходит на каждую карточку и извлекает более глубокие данные.
# Этап 1: собираем URL с помощью дешёвого Flash Lite
class Listing(BaseModel):
product_urls: list[str]
listing = client.models.generate_content(
model="gemini-2.5-flash-lite",
contents=f"Extract product URLs:\n{listing_md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Listing,
),
).parsed
# Этап 2: вытягиваем детали с помощью Flash
class ProductDetail(BaseModel):
name: str
price: str
specs: dict[str, str]
reviews: list[str]
for url in listing.product_urls:
md = fetch_clean(url)
detail = client.models.generate_content(
model="gemini-2.5-flash",
contents=f"Extract product detail:\n{md}",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=ProductDetail,
),
).parsed
# сохранить detail...
time.sleep(0.5)
Это работает, но требует много инфраструктуры: дедупликации URL, обработки ошибок, ограничения частоты запросов, retry-логики, кэширования сырого HTML, чтобы при изменении схемы не запускать повторный fetch. Для 50 страниц это ещё терпимо. Для 5,000 — ты уже строишь полноценную систему.
No-code альтернатива: встроенная пагинация и скрапинг подстраниц в Thunderbit
Thunderbit автоматически обрабатывает и пагинацию по кнопке, и бесконечный скролл — писать циклы не нужно. Для обогащения подстраниц функция "Scrape Subpages" обходит каждую детальную страницу, связанную со списком, и дополняет исходную таблицу более глубокими полями. Один клик вместо одного скрипта.
В режиме Cloud Scraping можно обрабатывать до 50 страниц одновременно, что сильно помогает, когда ты скрапишь каталог товаров или справочник недвижимости в больших объёмах. Для тех, кто не хочет заниматься Python-циклами и retry-логикой, это самый практичный вариант. (Кстати, у нас есть отдельный разбор на тему как выгружать данные с сайтов в Excel.)
Скрапинг по скриншоту: мультимодальный shortcut Gemini
Есть ещё один подход, который большинство гайдов вообще не рассматривает: отправить Gemini скриншот веб-страницы через vision API вместо сырого HTML. Один разработчик сообщал, что один скриншот стоит всего около ~258 токенов — по сравнению с тысячами даже у очищенного Markdown. Для простых извлечений это огромная разница в цене.
Как использовать Gemini Vision API для веб-скрапинга
Сделай скриншот через Playwright, закодируй его и отправь в Gemini:
from playwright.sync_api import sync_playwright
from google import genai
from google.genai import types
from pydantic import BaseModel
class Product(BaseModel):
title: str
price: str
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://example.com/product/widget-pro")
page.wait_for_load_state("networkidle")
png_bytes = page.screenshot(full_page=False) # только верхняя часть страницы
client = genai.Client()
resp = client.models.generate_content(
model="gemini-2.5-flash",
contents=[
{"inline_data": {"mime_type": "image/png", "data": png_bytes}},
"Extract the product title and price as JSON.",
],
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=Product,
),
)
print(resp.parsed)
Согласно документации Google по image tokens, изображение, у которого обе стороны не превышают 384 пикселя, стоит 258 токенов. Более крупные изображения разбиваются на фрагменты 768×768, каждый по 258 токенов. Короткий скриншот верхней части страницы (258–1,600 токенов) часто выигрывает у HTML, но очень длинный full-page скриншот (~5,000 токенов) может оказаться дороже, чем чистый Markdown (~765–1,200 токенов).
Ограничения скрапинга по скриншоту
- Ниже точность на плотных таблицах: многоколоночные макеты, мелкий шрифт и пересекающиеся элементы приводят к частичному чтению — не к галлюцинациям, а к пропущенным подписям и съехавшим заголовкам.
- Нельзя переходить по ссылкам: vision возвращает текст, а не кликабельные якоря. Никакой пагинации, никакого обогащения подстраниц.
- Предел по разрешению: текст меньше примерно 10 px часто распознаётся неверно. Google уменьшает изображения примерно до 1,568 px по длинной стороне.
- Накладные расходы на захват: запуск Playwright + ожидание networkidle занимает 2–5 секунд на страницу, а на масштабе это уже заметно.
Скриншот-scraping особенно хорош для тяжёлых JS-страниц, сайтов с антибот-защитой (когда requests.get() даёт 403, а браузер отображает страницу нормально) и страниц, где данные спрятаны в графиках или изображениях. Для длинных текстовых страниц Markdown всё равно обычно лучше.
Скрапинг изображений и PDF в Thunderbit использует похожий подход на базе vision AI — просто загрузи изображение или PDF, и система вернёт структурированную таблицу без скриптов для скриншотов и без работы с base64. (См. также: как конвертировать изображения в Excel.)
Когда Gemini Web Scraping не работает (и что делать вместо этого)
Gemini — это движок извлечения, а не движок получения страниц. Если ты не можешь передать содержимое страницы в Gemini, он не поможет. Точка.
Есть несколько типичных сценариев, когда весь подход ломается, и большинство туториалов упоминают их вскользь. Я лучше скажу прямо.
| Ограничение | Что происходит | Как обойти |
|---|---|---|
| Антибот / Cloudflare | API-запросы блокируются; requests.get() возвращает 403 или challenge-страницу | Используй прокси с ротацией TLS-фингерпринта или браузерные инструменты (режим Browser Scraping в Thunderbit использует твою авторизованную сессию) |
| Лимит контекстного окна | Большие страницы выходят за пределы рабочего контекста (~200K–300K для надёжного извлечения, хотя технически поддерживается 1M) | Очистка HTML→Markdown, разбиение страниц или использование скриншотов |
| Галлюцинации на визуальном контенте | Gemini угадывает по alt text или подписям, а не по реальному изображению | Валидируй результаты; используй vision API явно для изображений; добавляй grounding-валидаторы |
| Лимиты API | На масштабе запросы троттлятся — на бесплатном тарифе примерно 100 RPD на Pro, 1,000 RPD на Flash Lite | Очереди, batching (скидка 50%) или переход на готовые инструменты |
| Непоследовательное извлечение (Lite-модели) | Необязательные поля, временные метки и вложенные данные пропускаются или выдумываются | Перейди на Flash/Pro или задай более жёсткие ограничения схемы |
| Защищённые сайты (LinkedIn и т. п.) | Возвращаются ошибки или пустые данные | Браузерный скрапинг с активной сессией (Thunderbit это поддерживает); соблюдай ToS |
Несколько пунктов заслуживают дополнительного пояснения.
Антибот теперь умеет распознавать и LLM-трафик. Cloudflare по умолчанию блокирует AI-crawlers с июля 2025 года; за первые пять месяцев было заблокировано 416 млрд запросов от AI-ботов. В 2025 году Datadome добавил LLM-специфическое обнаружение и зафиксировал четырёхкратный рост трафика от LLM-ботов. Обычная связка requests.get() + Gemini против сайтов под Datadome практически мертва. Проблема в fingerprint, а не в IP — одна только ротация IP ничего не даст, если TLS-фингерпринт кричит "Python requests".
Галлюцинации бывают незаметными. LLM, натренированные быть полезными, часто заполняют необязательные поля правдоподобными выдумками вместо того, чтобы вернуть null. Я видел, как модели угадывали бренд товара по slug в URL, определяли валюту по домену и придумывали правдоподобное количество отзывов по skeleton-loader'ам. Набор мер защиты: строгие Pydantic-схемы, повторные попытки с обратной связью от валидации, grounding-валидаторы, которые проверяют, действительно ли извлечённое значение есть в исходном HTML, и двухпроходное извлечение (Flash извлекает, Pro проверяет выборку).
Контекстное окно 1M не означает, что 1M можно использовать без потерь. Исследования Chroma и других компаний показывают, что качество рассуждений начинает падать задолго до предельного лимита токенов. Для структурированного извлечения практический потолок — примерно 200K–300K токенов.
Дерево решений: какой инструмент выбрать?
- Низкий объём + простые страницы + ты разработчик → бесплатный тариф Gemini API + Python
- Средний объём + сложные схемы + ты разработчик → платный Gemini 2.5 Flash + Python + структурированные ответы + предобработка
- Любой объём + ты не разработчик + есть логин или тяжёлая пагинация → Thunderbit
- Очень большой объём + жёсткий антибот + критически важные данные → управляемая scraping-инфраструктура (proxy-сервисы) + Gemini как слой извлечения
Gemini Web Scraping: советы, которые экономят время и деньги
Неважно, пишешь ты Python или нажимаешь кнопки — эти советы сэкономят тебе массу нервов.
- Всегда преобразуй HTML в Markdown перед отправкой в Gemini. Обычно это даёт сокращение токенов в 5–10 раз; если ещё и предварительно обрезать HTML через BeautifulSoup, можно добиться и 95% экономии.
- Используй только
google-genai. Не используй устаревший пакетgoogle-generativeai— он EOL. - Начинай с Flash Lite только для плоских схем. Как только появляется вложенность или необязательные поля — переходи на Flash.
- Не используй
Field(default=...)в Pydantic-схемах, которые отправляешь в Gemini. Лучше задаватьsku: str | None = Noneна уровне типа. - Pydantic +
response_schema— это ключевой элемент. Это и контракт, и защита от галлюцинаций одновременно. - Используй Batch API для задач более чем на 1,000 страниц — он даёт скидку 50% и не входит в лимиты real-time RPM.
- Проверяй вручную случайную выборку из 10–50 строк перед масштабированием нового экстрактора. Снижение точности незаметно, пока ты не посмотришь глазами.
- Кэшируй сырой HTML на диск — изменения схемы не должны заново запускать получение страниц.
- Сохраняй исходный URL в каждой строке, чтобы можно было пересканировать отдельные страницы без повторного запуска всей задачи.
- Для no-code пользователей: используй кастомные AI-пrompt'ы на уровне колонок в Thunderbit — так ты переносишь prompt engineering прямо в таблицу: перевод, категоризация, суммаризация по колонкам.
И ещё один совет: не отправляй бесплатный тариф в production. В декабре 2025 лимиты урезали на 50–80%, и это могут повторить снова без предупреждения.
Итоги
Разница между демо Gemini на одном URL и production-пайплайном гораздо больше, чем обычно показывают в туториалах.
Связка Python + Gemini API даёт разработчикам полный контроль над выбором модели, предобработкой, пагинацией и схемой данных. No-code путь — инструменты вроде Thunderbit — даёт бизнес-пользователям тот же структурированный сбор данных без терминала.
Вот главные выводы:
- Выбор модели важен. Flash Lite — для объёма, Flash — для баланса, Pro — для сложности. Не выбирай автоматически самый дешёвый вариант и потом не удивляйся, почему данные неверные.
- Многостраничный скрапинг и подстраницы — это то место, где туториалы обычно заканчиваются и где начинается реальная работа. Оба подхода, описанные здесь, закрывают этот пробел.
- Честное понимание ограничений экономит время. Если сайт блокирует API-запросы, никакая магия prompt'ов не поможет. Выбирай инструмент под задачу, а не самый модный.
- Предобработка HTML в Markdown — самая сильная оптимизация во всём процессе: она сокращает стоимость более чем на 75% и снижает риск галлюцинаций.
Если хочешь попробовать no-code путь, бесплатный тариф Thunderbit позволит тебе скрапить несколько страниц и увидеть результат своими глазами. Если предпочитаешь код, бесплатного тарифа Gemini достаточно, чтобы за один вечер собрать прототип пайплайна. В любом случае структурированные данные ты получишь быстрее, чем при ручном копипасте. Подробнее о выгрузке данных с сайтов в Excel и о лучших AI web scrapers — в нашем блоге.
Попробуй Thunderbit для AI Web Scraping Get Started Free
FAQ
Сколько стоит использовать Gemini для веб-скрапинга?
У Gemini API есть бесплатный тариф: примерно 100 запросов в день для Pro, 500 в день для Flash и 1,000 в день для Flash Lite (по состоянию на начало 2026 года — в декабре 2025 лимиты были уменьшены). На платном тарифе скрапинг 10,000 страниц товаров обойдётся примерно в $1.50 с Flash Lite, около $6 с Flash или около $25 с Pro — при условии, что ты сначала преобразуешь HTML в Markdown. Без предобработки стоимость вырастет в 4–5 раз. Batch API даёт скидку 50% для задач, которые не требуют немедленного ответа.
Может ли Gemini скрапить сайты с логином?
Сам API Gemini не умеет логиниться на сайты — он только обрабатывает тот контент, который ты ему отправляешь. Тебе нужно самостоятельно получить HTML в своей авторизованной сессии, например через headless-браузер и сохранённые cookies. Режим Browser Scraping в Thunderbit делает это нативно: он работает в твоей авторизованной вкладке Chrome, поэтому любой сайт, который ты видишь в браузере, Thunderbit может собрать.
Законен ли Gemini web scraping?
Законность зависит от условий использования сайта, типа данных и твоей юрисдикции. В США, после дел hiQ v. LinkedIn и Meta v. Bright Data, сбор публично доступных данных без логина обычно считается допустимым — но каждый случай нужно оценивать отдельно. Скрапинг страниц за логином несёт более высокий юридический риск. Персональные данные жителей ЕС подпадают под GDPR вне зависимости от того, является сайт публичным или нет. Всегда соблюдай robots.txt и условия использования, а также не собирай персональные данные без законного основания.
Можно ли использовать Gemini для скрапинга динамических сайтов на JavaScript?
Да, но сначала нужно отрендерить JavaScript — либо через headless-браузер (Playwright, Puppeteer), либо напрямую перехватив API-endpoint сайта. Как только у тебя есть отрендеренный HTML, очисти его и отправь в Gemini как обычно. Либо используй скрапинг по скриншоту через vision API Gemini — если страница отображается в браузере, Gemini её увидит. Thunderbit автоматически обрабатывает страницы, рендеримые через JS, как в Cloud, так и в Browser-режиме.
В чём разница между использованием Gemini для скрапинга и специализированным инструментом вроде Thunderbit?
Gemini — это движок извлечения: он интерпретирует контент и возвращает структурированные данные. Он не посещает сайты, не управляет пагинацией, не авторизуется и не экспортирует данные в таблицы. Тебе всё равно нужен инструмент, который доставит содержимое страницы в Gemini, и инструмент, который превратит результат во что-то полезное. Специализированные решения вроде Thunderbit объединяют получение страницы, рендеринг, AI-извлечение, пагинацию, обогащение подстраниц и экспорт в одном пакете — без лишней инфраструктуры.
Узнать больше


