Начать пробный период
Назад

Веб-скрапинг или API: как извлекать данные JSON с помощью Python

Обобщите эту статью с помощью предпочитаемого вами AI
Попробуйте наши премиум-прокси

Протестируйте наши премиум-прокси без ограничений по качеству.

  • Мобильные и резидентные прокси
  • Таргетинг на уровне ZIP
  • Статические и ротируемые IP
  • Встроенный фильтр качества
Попробовать сейчас

Если сайт уже загружает данные через JSON-эндпоинт, обращение к нему обычно быстрее, чем скрапинг HTML или запуск Selenium. Вы получаете структурированные данные прямо из источника, который использует сама страница, и не ждёте, пока браузер отрисует каждую кнопку, карточку, скрипт, изображение и всплывающее окно.

Скрапинг HTML и браузерный скрапинг по-прежнему нужны. Некоторые сайты помещают данные прямо в исходный код страницы. Другим требуются клики, прокрутка, формы или отрисовка в браузере. Но на многих динамических сайтах самый чистый путь начинается во вкладке Network в браузере.

Современный веб даёт скраперам повод проверять этот путь в первую очередь. Глава о JavaScript в HTTP Archive Web Almanac сообщает, что в 2024 году медианный объём JavaScript достиг 558 КБ на мобильных и 613 КБ на десктопе . Многие страницы теперь сначала загружают HTML-оболочку, а затем подтягивают сами данные фоновыми запросами.

Представьте, например, что вы скрапите систему бронирования отелей. Классический метод по HTML возвращает пустые контейнеры. Selenium может отрисовать номера, но каждая страница грузится медленно, а при пагинации появляются ошибки. Если цены на номера, даты, названия и доступность приходят фоновым JSON-запросом, вы можете забирать эти данные прямо с эндпоинта.

В этом руководстве показано, как изучить страницу, найти запрос к API, протестировать его в Postman, преобразовать в Python, обработать пагинацию и сохранить результаты в CSV.

Масштабируйте скрапинг API с чистыми сессиями

Используйте резидентные прокси NodeMaven, липкие сессии, геотаргетинг и Scraping Browser для более сложных страниц с обилием JavaScript. Начните с 750 МБ для $3.50.

Попробовать сейчас

Коротко: что выбрать, веб-скрапинг или API?

Использование API-скрейпинг когда страница загружает чистый JSON через Fetch/XHR и к эндпоинту можно безопасно обращаться.

Пробуй HTML-скрейпинг когда данные уже присутствуют в исходном коде страницы.

Использование Браузерный скрейпинг когда сценарию нужна отрисовка JavaScript, клики, прокрутка, скриншоты, отправка форм или визуальная отладка.

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

Веб-скрапинг и API: в чём разница?

Веб-скрейпинг извлекает данные со страницы сайта. Скрапинг API отправляет запрос к тому эндпоинту, через который сайт загружает структурированные данные, обычно в JSON.

МетодКак это работаетЛучшая точка старта
HTML-скрейпингЗагружает HTML страницы и разбирает элементыСтатичные страницы
Браузерный скрейпингОткрывает страницу через Selenium или PlaywrightСтраницы с активным JavaScript, клики, прокрутка
Скрапинг API-эндпоинтовОбращается напрямую к фоновому JSON-запросуДинамические страницы с видимыми данными XHR/fetch

In a basic веб-скрейпинг сценарии скрапер скачивает HTML и извлекает текст по селекторам. Руководство NodeMaven веб-скрапинг на Python описывает этот классический подход с Requests и BeautifulSoup.

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

Именно поэтому скрапинг API может быть быстрее и чище. Данные уже структурированы ещё до того, как сайт превратит их в визуальные элементы.

Официальные API против фронтенд-эндпоинтов

Официальный API документирован и создан для разработчиков. Обычно у него есть аутентификация, лимиты запросов, версионирование, примеры ответов и правила использования.

Фронтенд-эндпоинт — это запрос, который интерфейс самого сайта отправляет в фоне. Часто его видно в Chrome DevTools во вкладке Fetch/XHR. Он может возвращать чистый JSON, но способен измениться без предупреждения и зависеть от cookie, токенов, заголовков или подписанных данных.

Используйте официальный API, если он даёт нужные вам поля и лимиты. Используйте фронтенд-эндпоинт только тогда, когда доступ разрешён и запрос можно надёжно воспроизвести. Используйте браузерный скрапинг, если эндпоинт слишком сложно воспроизвести или сценарий зависит от отрисованной страницы.

Почему скрапинг API-эндпоинтов бывает быстрее Selenium

Система бронирования отелей может показывать карточки номеров только после того, как JavaScript загрузит цены и доступность из API. Selenium умеет дожидаться отрисованных карточек, но каждый запуск приносит запуск браузера, выполнение JavaScript, изображения, CSS, всплывающие окна и логику ожидания.

Скрапинг API-эндпоинтов обходит этот отрисованный интерфейс, когда те же данные уже доступны в формате JSON. Вместо того чтобы ждать, пока браузер отобразит карточку номера, ваш скрипт запрашивает данные, стоящие за ней.

Это часто всплывает в обсуждениях разработчиков. В треде на Stack Overflow о медленном скрапинге на Seleniumв ответе указывают на накладные расходы браузера в Selenium и рекомендуют изучить вкладку Network, чтобы воспроизвести исходные запросы на Python.

Такой подход помогает сократить:

  • длинные CSS-селекторы для каждого поля
  • ожидание отрисовки элементов
  • сбои браузера
  • медленную пагинацию
  • громоздкий разбор HTML
  • высокую нагрузку на CPU и память

Но скрапинг API-эндпоинтов подходит не всегда. Некоторые эндпоинты требуют закрытой авторизации, CSRF-значений, одноразовых токенов, подписанных payload'ов или строгой проверки сессии. Другие меняются без предупреждения, потому что созданы для фронтенда сайта, а не для внешних разработчиков.

Если эндпоинт закрыт или в работе нужны клики, скриншоты, прокрутка, формы или визуальная отладка, используйте браузерный скрапинг. Playwright и Selenium оба открывают страницу, выполняют JavaScript и работают с отрисованным результатом.

Для браузерного скрапинга, которому нужны выполнение в облаке, прокси, обработка CAPTCHA, отладка через Live Browser и записи сессий, браузер для скрапинга NodeMaven дает вам управляемую среду Chrome вместо того, чтобы поддерживать браузерный стек самостоятельно.

Если у сайта есть официальный API с нужными вам полями и лимитами, начните с него. Он задокументирован, версионируется и обычно проще в поддержке , чем фронтенд-эндпоинт, найденный в DevTools.

Масштабируйте скрапинг API с чистыми сессиями

Используйте резидентные прокси NodeMaven, липкие сессии, геотаргетинг и Scraping Browser для более сложных страниц с обилием JavaScript. Начните с 750 МБ для $3.50.

Попробовать сейчас

Подготовка к руководству: инструменты и демо-сайт

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

  • Хром
  • Postman
  • Python 3
  • Запросы

Для демонстрации используйте Quotes to Scrape с бесконечной прокруткой. Он создан для практики скрапинга, загружает данные динамически и предоставляет чистый JSON-эндпоинт.

Перед запуском примеров на Python вы установите Requests внутри виртуального окружения. Это позволяет избежать ошибки externally-managed-environment, которая может возникать в новых версиях Python из Homebrew.

Шаг 1: найдите API-эндпоинт в Chrome DevTools

Открыть Quotes to Scrape с бесконечной прокруткой in Chrome.

Кликните по странице правой кнопкой мыши и выберите Проверить. Откройте Сеть вкладку, затем нажмите Fetch/XHR. Перезагрузите страницу или прокручивайте её, пока не появятся новые запросы.

В списке запросов нажмите quotes?page=1. Затем откройте вкладку Preview . Если вы видите поля вроде has_next, page, quotes и top_ten_tags, значит вы нашли JSON-ответ, который стоит за страницей.

В этой демонстрации эндпоинт такой:

The page=1 part controls pagination. Later, the Python script will change that value to collect page 2, page 3, and the rest of the available results.

Chrome’s Справочник по возможностям панели Network объясняет, как панель Network показывает запросы, отправленные страницей, включая Fetch/XHR-запросы и предпросмотр ответов.

API Scraping tutorial

Шаг 2: протестируйте эндпоинт в Postman

After you find the request in Chrome DevTools, right-click quotes?page=1 and choose:

Copy > Copy as cURL

Откройте Postman и вставьте скопированный cURL в поле URL запроса. В этой демонстрации Postman извлекает эндпоинт и показывает его так:

Оставьте метод GET и нажмите Send.

Если в панели ответа отображается 200 OK и JSON-поля вроде has_next, page и quotes, значит эндпоинт работает и вне браузера.

Также проверьте Params tab. Postman separates page=1 into a query parameter. This is important because the Python script will later change that value to page=2, page=3, and so on.

Теперь откройте в Postman панель Code snippet и выберите Python – Requests. Postman сгенерирует код на Python для того же запроса, включая URL эндпоинта, метод, заголовки и структуру payload.

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

API Scraping tutorial
Postman подтверждает, что скопированный эндпоинт возвращает JSON и может быть преобразован в сниппет на Python с Requests.

Что проверить перед переходом к Python

Перед тем как писать код, изучите запрос в Postman.

Начните с Request URL. Это адрес эндпоинта. Затем проверьте Метод, обычно GET или POST.

GET-запрос часто хранит значения в URL. POST-запрос может отправлять отдельный payload.

Далее изучите параметры запроса. In this demo, page=1 controls pagination. On real websites, parameters can control the search term, category, city, date, currency, sort order, offset, or cursor.

Для POST-запросов откройте вкладку Payload . Сайты бронирования могут отправлять такие значения, как destination, checkin, checkout, adults, currency и page. Эндпоинты интернет-магазинов могут использовать query, category, sort, limit и offset.

Перед переходом к Python проверьте:

  • Headers: content type, accept, user agent и заголовки, специфичные для запроса
  • Cookie или токены: значения сессии, CSRF-токены или значения авторизации
  • Структура ответа: где в JSON находятся нужные вам поля
  • Поля пагинации: такие значения, как page, offset, cursor, has_next или next

Если позже запрос на Python не сработает, чаще всего не хватает как раз одного из этих элементов.

Шаг 3: создайте и выполните первый запрос на Python

Откройте редактор кода, например VS Code, Cursor или TextEdit в режиме обычного текста.

Создайте новый файл с именем:

Вставьте Python – Requests код, сгенерированный Postman, в файл:

Сохраните файл.

Откройте Terminal и перейдите в папку, куда вы сохранили файл. Например, если вы сохранили его на рабочем столе, выполните:

Создайте виртуальное окружение:

Активируйте его:

Установите Requests внутри виртуального окружения:

Запустите скрипт:

Если всё работает, терминал выведет JSON-ответ.

На этом этапе цель проста: убедиться, что Python может отправить тот же запрос, который вы протестировали в Postman.

Если вы видите ошибку о том, что файл не найден, проверьте имя файла. На Mac TextEdit может сохранить файл в формате .rtf.

Шаг 4: соберите все страницы и сохраните в CSV

Go back to quotes_api_scraper.py.

Now replace the test code with a full scraper. This version keeps the same headers from Postman, changes the page value automatically, and saves the results to quotes.csv.

Сохраните файл и запустите его снова:

Теперь в той же папке должен появиться новый файл:

quotes.csv

API Scraping tutorial

Этот CSV и есть итоговый результат руководства. В нём собраны текст цитаты, имя автора и теги со всех доступных страниц.

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

Зачем при скрапинге API нужны прокси, стабильные сессии и геотаргетинг

Скрапинг через API-эндпоинты быстрее, чем автоматизация браузера, но запросы всё равно идут с определённого IP-адреса. На небольших объёмах обычного подключения может хватить. На больших объёмах повторяющиеся запросы к эндпоинту упираются в лимиты частоты запросов, региональные ответы или проверки репутации IP.

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

Использование ISP прокси на регулярный мониторинг с одного стабильного IP. Для Python-скриптов в разделе NodeMaven прокси для Python описаны типовые схемы настройки. Если эндпоинт возвращает локальные цены, доступность доставки или региональные объявления, Таргетинг на уровне ZIP помогает привязать набор данных к нужной локации.

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

Масштабируйте скрапинг API с чистыми сессиями

Используйте резидентные прокси NodeMaven, липкие сессии, геотаргетинг и Scraping Browser для более сложных страниц с обилием JavaScript. Начните с 750 МБ для $3.50.

Попробовать сейчас

Частые проблемы при скрапинге API-эндпоинтов

Эндпоинт работает в Chrome, но не работает в Python

Обычно это значит, что запросу из Python не хватает того, что браузер отправлял автоматически.

Проверьте заголовки, cookies, CSRF-токены, значения авторизации, поля подписи запроса и полезную нагрузку POST. Сравните рабочий запрос в DevTools с запросом из Python бок о бок.

A Обсуждение на Stack Overflow о скрапинге динамической веб-таблицы наглядно показывает эту схему. XHR-запросам требовался токен верификации со страницы, прежде чем API-запрос начинал работать.

API возвращает 401, 403 или 429

401 или 403 обычно означает, что эндпоинту нужна авторизация, действительная сессия или подпись запроса. Не пытайтесь взломать приватные эндпоинты.

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

JSON пустой или в нём не хватает полей

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

Откройте Payload и Query String Parameters во вкладках DevTools. Затем измените одно значение и отправьте запрос заново в Postman. Так вы поймёте, какой параметр отвечает за какую часть ответа.

Эндпоинт меняется

Фронтенд-эндпоинты не являются стабильными контрактами. Сайт может переименовать маршрут, изменить полезную нагрузку, убрать поле или добавить проверку токена без предупреждения.

Добавьте валидацию ответа перед сохранением данных. Если обязательного поля нет, запишите в лог URL, код статуса, фрагмент ответа иметку вместо того, чтобы писать битые строки в CSV.

Если эндпоинт зависит от кликов, отрисованного контента, приватных токенов или постоянного состояния браузера, вернитесь к браузерному скрапингу. Для таких случаев браузер для скрапинга NodeMaven может запускать настоящий облачный браузер с прокси NodeMaven, поддержкой CAPTCHA, отладкой в Live Browser и записями сессий.

Масштабируйте скрапинг API с чистыми сессиями

Используйте резидентные прокси NodeMaven, липкие сессии, геотаргетинг и Scraping Browser для более сложных страниц с обилием JavaScript. Начните с 750 МБ для $3.50.

Попробовать сейчас

Заключение

Прежде чем писать скрапер на Selenium, загляните во вкладку Network. Если страница уже подгружает данные через JSON-эндпоинт, скрапинг через API сэкономит время и даст более чистый результат.

Начните с одного запроса. Протестируйте его в Postman. Переведите его в Python. Добавьте пагинацию. Сохраните данные в CSV. Затем проверьте лимиты запросов, регион, cookies, поведение сессии и качество прокси, прежде чем масштабировать задачу.

Для небольших тестов хватит и собственного подключения. Для регулярного скрапинга через API, локальных цен, результатов бронирования, наличия товаров или облачных задач на Python чистые прокси и стабильные сессии помогают избежать ситуации, когда рабочий скрипт выдает «грязные» данные.

FAQ

Веб-скрейпинг извлекает данные из HTML или отрисованных страниц. API-скрейпинг отправляет запросы к эндпоинту, через который сайт загружает структурированные данные, обычно в формате JSON.

Если страница уже получает готовый JSON через Fetch/XHR, скрапинг через API обычно быстрее. Если же данные появляются только после кликов, прокрутки или отрисовки JavaScript, лучше подойдет браузерный скрапинг.

Откройте Chrome DevTools, перейдите на вкладку Сеть, filter by Fetch/XHR, перезагрузите страницу и просмотрите запросы, которые возвращают JSON с данными, отображаемыми на странице.

Ищите поля вроде названий товаров, цен, ID объявлений, дат, авторов, рейтингов или параметров пагинации. Затем скопируйте запрос как cURL, протестируйте его в Postman и переведите на Python.

Часто да. Если данные уже доступны через JSON-эндпоинт, скрапинг через API обходится без отрисовки страницы в браузере, ожиданий, селекторов, изображений, CSS и скриншотов.

Используйте Selenium или Playwright, когда сценарию нужно взаимодействие с реальным браузером, например вход в аккаунт, формы, всплывающие окна, прокрутка, скриншоты или визуальные проверки.

В запросе на Python может не хватать заголовков, cookie, CSRF-токенов, значений авторизации, параметров запроса или данных в теле POST-запроса.

Именно поэтому полезно скопировать запрос как cURL и протестировать его в Postman. Так вы увидите, что именно отправил браузер, прежде чем переписывать запрос на Python.

Для небольшого теста нет. Прокси становятся полезны, когда запросы повторяются, зависят от геолокации, ограничены по частоте или выполняются из облачной инфраструктуры.

Например, цены в интернет-магазинах, объявления о недвижимости, наличие мест в отелях и варианты доставки могут отличаться по регионам. В таких случаях резидентные прокси, sticky-сессии или таргетинг до уровня почтового индекса помогают сохранить целостность набора данных.

Иногда да. Многие интернет-магазины подгружают цены, наличие, отзывы, доставку и рекомендации товаров через фоновые запросы.

Сложность в том, чтобы запрос оставался валидным. Крупные интернет-магазины могут использовать меняющиеся токены, cookie, настройки локации, антибот-проверки и региональное ценообразование. Начните с одной страницы товара, проверьте JSON-ответ и не масштабируйте скрапер, пока он не будет возвращать ту же цену и наличие, что вы видите в браузере.

Да, если сайт отдаёт данные об объявлениях, ценах, доступности или результатах поиска через фоновые запросы, к которым можно обращаться в рамках правил сайта.

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

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

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

Вам также могут понравиться эти статьи

Этот сайт использует Файлы cookie чтобы улучшить ваш опыт. Продолжая, вы соглашаетесь на использование файлов cookie.