AI веб-скрейпинг: Извлечение LLM, Prompt-to-JSON и стоимость
Извлечение LLM превращает любую страницу в чистый JSON из простого английского запроса — без необходимости поддерживать селекторы. Но модель не может загружать страницу, а сырая HTML быстро расходует токены. Вот как сделать это правильно.
AI веб-скрейпинг означает указание языковой модели на страницу и запрос, на простом английском, полей, которые вы хотите получить в виде JSON — без написания CSS селекторов, без необходимости поддерживать парсер при изменении макета. Это действительно трансформирует процесс для неструктурированных, разнообразных или одноразовых извлечений. Это также часто неправильно понимается, из-за чего люди в итоге платят за скрейпинг нескольких сотен страниц и получают галлюцинированные данные. Два факта устраняют большую часть этого недопонимания: языковая модель не может загружать веб-страницу — она только анализирует текст, который вы ей предоставляете — и подача ей сырого HTML — это самый быстрый способ сжечь ваш бюджет токенов. Это руководство охватывает шаблон извлечения, который работает, когда он превосходит селекторы, и как держать под контролем как стоимость, так и галлюцинации.
То, о чем никто не говорит: модель не может загружать
Сложная часть AI скрейпинга — это не AI. Чат-бот не может надежно загружать живую страницу — ему нужен специальный движок, чтобы сначала получить HTML, а затем он анализирует текст, который вы предоставляете. Таким образом, конвейер извлечения LLM на самом деле является конвейером скрейпинга с умным парсером в конце, и именно в части скрейпинга все ломается: управление ботами, рендеринг JavaScript, блокировки IP. Решите проблему загрузки с помощью прокси и слоя рендеринга, и извлечение станет легкой частью. Чистый способ получить страницы — это scraper API, который обрабатывает ротацию и рендеринг и возвращает markdown, который, как показано в следующем разделе, также является самым дешевым возможным входом для модели:
import requests
def fetch_markdown(url, api_key):
r = requests.get(
"https://api.quantumproxies.io/scrape",
params={"url": url, "render": "auto", "output": "markdown"},
headers={"Authorization": f"Bearer {api_key}"},
timeout=(5, 40),
)
r.raise_for_status()
return r.json()["markdown"] # nav/ads stripped, ready for the model
Почему markdown, а не HTML, является настоящим рычагом стоимости
Наибольший фактор стоимости AI скрейпинга — это количество токенов, которые вы пропускаете через модель, и сырой HTML в основном состоит из токенов, которые вам не нужны: встроенные стили, теги скриптов, атрибуты отслеживания, навигация, футеры. Преобразуйте страницу в чистый markdown — или извлеките только основное содержимое — перед извлечением, и вы регулярно сокращаете размер входных данных на порядок, что снижает стоимость на тот же фактор и, в качестве бонуса, уменьшает галлюцинации, потому что модель видит содержимое, а не обрамление. Вот почему markdown-first является стандартом для подачи моделей, тот же принцип лежит в основе подачи LLM свежими веб-данными. Если вы возьмете из этой статьи только одно: никогда не отправляйте модели исходный код страницы.

Prompt-to-JSON со схемой
Как только у вас есть чистый текст, извлечение — это один вызов: опишите поля, которые вы хотите, передайте схему, чтобы выходные данные были структурированными, и укажите модели возвращать null, а не придумывать, когда поле отсутствует. extraction API объединяет загрузку, очистку и извлечение в один запрос, так что вы полностью избегаете сложной работы:
curl -X POST "https://api.quantumproxies.io/extract" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product/xyz",
"schema": {
"title": "string",
"price": "number",
"in_stock": "boolean",
"rating": "number|null"
},
"prompt": "Extract the product. Use null for anything not present."
}'
Схема выполняет двойную функцию: она обеспечивает предсказуемую форму для последующего кода и ограничивает модель, что является первой линией защиты от галлюцинированных полей. Проверьте ответ по той же схеме и отклоните все, что не соответствует — вымышленная цена хуже, чем отсутствующая.
def validate(record, schema):
for field, kind in schema.items():
v = record.get(field)
if v is None and "null" not in kind:
raise ValueError(f"missing required field: {field}")
return record # only trust records that satisfy the schema
Когда извлечение LLM превосходит CSS селекторы — и когда нет
AI извлечение не является универсальным улучшением; это другой инструмент с другой кривой стоимости. Используйте его, когда работа разнообразна или нестабильна — скрейпинг тысячи сайтов с тысячей макетов, сайт, который постоянно редизайнится, неструктурированное содержимое, такое как отзывы или списки, где нет чистого селектора, или одноразовая задача, где написание селекторов не стоит времени. Оставайтесь с CSS или XPath селекторами, когда вы работаете с одним стабильным сайтом на высоком объеме: селекторы детерминированы, практически бесплатны на страницу и никогда не галлюцинируют. Зрелый шаблон — это гибрид — селекторы для ваших основных целей с высоким объемом, извлечение LLM для длинного хвоста и сайтов, которые продолжают меняться.
Дисциплина стоимости превращает это из эксперимента в производство. Помимо markdown-first, агрессивно кэшируйте, чтобы никогда не извлекать неизмененную страницу повторно, сопоставляйте размер модели со сложностью задачи — маленькая модель отлично справляется с простым извлечением полей — и объединяйте, где это позволяет API. Рендеринг — это отдельная статья расходов; рендерьте только те страницы, которым действительно нужен JavaScript, решение, которое мы количественно оцениваем в рендерьте только когда необходимо. Получите пустую страницу вместо содержимого, и исправление обычно заключается в рендеринге, освещенном в пустая страница, отсутствующие данные.
Слово о бесплатном и open-source пути, так как это то, что большинство людей ищет в первую очередь. Open-source библиотеки извлечения отлично подходят для изучения шаблона и для небольших задач, но они возвращают вам две сложные проблемы, с которых началась эта статья: вам все еще нужно загружать страницы, обходя управление ботами, и вы все равно платите за модель, которая выполняет извлечение. 'Бесплатно' обычно означает бесплатный код плюс ваши собственные счета за прокси и токены. Это хорошая сделка для хобби-проекта или доказательства концепции; на производственном уровне поддержка слоя загрузки — это именно то, что команды в итоге отдают на аутсорсинг, решение "строить или покупать", которое мы излагаем в DIY стек скрейпинга против scraper API.

Часто задаваемые вопросы
Может ли ChatGPT скрейпить веб-сайт?
Нет, самостоятельно. Языковая модель не может надежно загружать и рендерить живую страницу — она анализирует текст, который вы предоставляете. Чтобы использовать AI для скрейпинга, вы сочетаете специальный движок скрейпинга, который загружает и очищает страницу, с моделью, которая извлекает структурированные данные из результата. Движок скрейпинга обрабатывает прокси, рендеринг и блокировки; модель обрабатывает преобразование содержимого в JSON.
Как я могу снизить стоимость AI веб-скрейпинга?
Преобразуйте страницы в markdown или извлеките основное содержимое перед отправкой чего-либо модели — сырой HTML может содержать в десять раз больше токенов для той же информации. Затем кэшируйте неизмененные страницы, используйте меньшую модель для простого извлечения полей, рендерьте JavaScript только когда это необходимо, и объединяйте запросы. Объем токенов — это доминирующая стоимость, поэтому сокращение размера входных данных — это оптимизация с наибольшим эффектом.
Галлюцинирует ли AI веб-скрейпинг неправильные данные?
Может, особенно когда подается шумный сырой HTML или запрашиваются поля, которых нет на странице. Защититесь от этого, очищая входные данные, передавая явную схему, указывая модели возвращать null, когда значение отсутствует, и проверяя каждый ответ по этой схеме, прежде чем доверять ему. Отсутствующее поле можно попробовать снова; уверенно вымышленное поле тихо портит ваш набор данных.
Является ли извлечение LLM лучше, чем CSS селекторы?
Это зависит от задачи. Извлечение LLM выигрывает, когда макеты варьируются или часто меняются и когда написание селекторов не стоит того, потому что оно не требует селекторов и выдерживает редизайны. CSS селекторы выигрывают на одном стабильном сайте с высоким объемом: они детерминированы и значительно дешевле на страницу. Большинство производственных конвейеров используют селекторы для основных целей и извлечение LLM для длинного хвоста.
AI веб-скрейпинг мощен, когда вы перестаете считать модель скрейпером. Чисто загружайте с помощью прокси, подавайте markdown, а не HTML, ограничивайте вывод схемой и оставляйте извлечение LLM для задач, где его гибкость оправдывает стоимость токенов. Это разница между гладкой демонстрацией и конвейером, который можно запускать каждый день.