Вход Регистрация

Парсинг

Как справиться с пагинацией при веб-скрапинге?

Узнайте, как эффективно обрабатывать пагинацию при веб-скрапинге. Разберитесь в методах работы с статической, динамической пагинацией и других вариаций.

Команда Froxy 12 мар 2025 5 мин
Как справиться с пагинацией при веб-скрапинге?

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

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

Что такое пагинация?

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

Распространенные типы пагинации

Распространенные типы пагинации

Разберёмся, какие бывают виды пагинации и как идентифицировать их на сайтах.

Статическая пагинация

Этот тип пагинации можно встретить на многих сайтах, особенно в интернет-магазинах и каталогах. Каждая страница имеет уникальный URL, который содержит параметры, указывающие номер страницы.

На странице могут быть кнопки «Вперед», «Назад» и пронумерованные ссылки (1, 2, 3, …). Когда пользователь нажимает на следующую страницу, он переходит по другому URL, а сайт загружает новый набор данных.

Адрес страницы может выглядеть так:

  • example.com/products?page=1
  • example.com/products?page=2
  • example.com/products?page=3

Динамическая пагинация

При этом типе пагинации данные не загружаются сразу при переходе на новую страницу. Вместо этого сайт отправляет запрос на сервер и получает данные в фоне без обновления страницы. То есть, пользователь может нажимать, например, на кнопку «Следующая страница», но вместо загрузки новой страницы контент подгружается прямо в текущую.

Вот как это работает поэтапно:

  1. Страница отображает часть данных.
  2. При нажатии на «Следующую» сайт запрашивает данные у сервера через AJAX.
  3. Сервер отправляет новый список товаров/контента, который добавляется на страницу.

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

Бесконечная прокрутка

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

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

Кнопки “Загрузить еще”

Такой вариант пагинации можно назвать промежуточным между динамической пагинацией и бесконечной прокруткой. На странице отображается фиксированное количество элементов и кнопка «Загрузить еще». При ее нажатии загружается следующая партия данных.

Это позволяет пользователю контролировать процесс загрузки и экономить ресурсы сервера, так как не грузит лишние данные.

Глобальное покрытие

5 континентов, без ограничений

Получите доступ к прокси-сети с 200+ локациями и 10+ миллионами IP-адресов.

Тарифы

Трудности при скрапинге пагинационных данных

Когда данные разбросаны по разным страницам, приходится придумывать разные способы, как их собрать. И если с классической пагинацией всё просто, то динамические варианты могут устроить настоящую проверку на прочность.

Многие сайты вводят лимиты на количество запросов с одного IP-адреса за определённое время. Если частота запросов слишком высокая, сервер может заблокировать доступ или временно ограничить просмотр страниц, выдавая ошибку 429 (Too Many Requests). Это особенно критично при работе с глубокой пагинацией, где приходится загружать сотни страниц подряд.

Также, некоторые сайты не используют стандартный формат пагинации с ?page=1,2,3.... Вместо этого они могут передавать уникальные cursor-токены, offset-параметры или динамически изменяемые ссылки. В таких случаях простое увеличение номера страницы в URL не сработает, и нужно разбираться, как именно сайт загружает новые данные.

Некоторые платформы искусственно ограничивают доступ к глубоким страницам, тем самым создавая лимиты на пагинацию. Например, поисковые системы или каталоги товаров могут отображать только первые 10-20 страниц, а дальше требовать фильтрацию или авторизацию. Это создаёт дополнительную сложность при массовом сборе данных.

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

Даже если вам удалось получить данные, их формат может быть неудобным для обработки. Одни сайты используют HTML-таблицы, другие — JSON-ответы от API, третьи шифруют или кодируют информацию. Это требует дополнительного анализа данных перед их обработкой.

Инструменты и библиотеки для пагинации

Инструменты и библиотеки для пагинации

Когда вы понимаете, как именно сайт подгружает данные, можно выбрать подходящий инструмент для сбора информации.

  • Python Requests + BeautifulSoup (Python)

Когда сайт использует статическую пагинацию, этот связка — самое простое и быстрое решение. Requests позволяет отправлять HTTP-запросы и получать HTML-страницы. BeautifulSoup помогает разобрать HTML и извлечь нужные данные.

Когда использовать: если у сайта обычная пагинация через ?page=1,2,3....

  • Selenium / Playwright / Puppeteer

Если сайт рендерит контент через JavaScript или использует динамическую подгрузку, обычные HTTP-запросы не помогут. Тут в дело вступают браузерные инструменты. Selenium эмулирует действия пользователя, подходит для сложных сайтов. Playwright, как более быстрый и удобный аналог Selenium, поддерживает работу с разными браузерами. А Puppeteer удобен для JavaScript-рендеринга. Как выбрать между Playwright и Puppeteer?

Когда использовать: если сайт подгружает контент через AJAX или использует бесконечную прокрутку.

  • Scrapy

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

Когда использовать: если у вас большой проект, где нужно собирать данные с нескольких страниц.

  • Прокси и антидетект браузеры

Если сайт блокирует запросы, использует техники анти-скрапинга, то прокси и антидетект браузеры помогут замаскировать ваш трафик. Внедрив прокси с ротацией IP в скрапер вы сможете избавиться от головной боли с блокировками. Кстати, Froxy располагает более 10 миллионов белых IP-адресов.

Когда использовать: если ваш IP блокируют или сайт защищён от массового скрапинга.

Методы работы с пагинацией

Методы работы с пагинацией

Скрапинг пагинированных данных требует разных подходов в зависимости от того, как сайт реализует подгрузку контента. Одни сайты используют классическую нумерацию страниц, другие загружают данные динамически через AJAX или бесконечную прокрутку. Разберем каждый из вариантов!

Статическая пагинация

Это самый простой случай. У каждой страницы есть свой URL с числовым параметром (?page=1, ?page=2 и так далее). Для скрапинга такой структуры достаточно просто изменять номер страницы в ссылке, поэтому:

  1. Определяем базовый URL и находим параметр, который меняется.
  2. Запускаем цикл, где увеличиваем номер страницы, пока не дойдём до конца.
  3. Проверяем, есть ли кнопка «Следующая страница» или данные закончились.

Пример кода Python + BeautifulSoup:

import requestsfrom bs4 import BeautifulSoupbase_url = "https://example.com/products?page="page_num = 1while True:response = requests.get(base_url + str(page_num))if response.status_code != 200:breaksoup = BeautifulSoup(response.text, 'html.parser')# Извлекаем данные с текущей страницыprint(f"Скрапим страницу {page_num}…")# Проверяем, есть ли кнопка «следующая страница»if not soup.find('a', {'class': 'next-page'}):breakpage_num += 1

 

Этот метод хорош для сайтов, где номера страниц идут по порядку и легко предсказать структуру URL.

Динамическая пагинация

Некоторые сайты загружают данные без перезагрузки страницы с помощью AJAX. Это значит, что обычные HTTP-запросы ничего не дадут — данные появляются только после выполнения JavaScript-кода.

План действий таков:

  1. Использовать Selenium или Playwright для эмуляции работы браузера.
  2. Найти сетевые запросы (в DevTools → Network), чтобы понять, откуда загружается контент.
  3. Подключиться к API и напрямую запрашивать данные без рендеринга страницы.

Пример кода Python + Selenium:

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysimport timedriver = webdriver.Chrome()driver.get("https://example.com/products")while True:# Прокручиваем страницу вниз, чтобы подгрузить новые данныеdriver.find_element(By.TAG_NAME, "body").send_keys(Keys.END)time.sleep(2)# Даем время для загрузки контента# Проверяем, есть ли кнопка "Следующая страница"next_button = driver.find_elements(By.CLASS_NAME, "next-page")if not next_button:breaknext_button[0].click()driver.quit()

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

Бесконечная прокрутка

На сайтах с бесконечной прокруткой (например, Twitter или TikTok) данные загружаются автоматически при скроллинге вниз. Поэтому необходима имитация прокрутки пользователем с помощью автоматизации браузера.

Рекомендуем:

  1. Использовать Selenium или Playwright для эмуляции прокрутки.
  2. Перехватывать сетевые запросы (через DevTools или инструменты мониторинга трафика).
  3. Определять момент, когда новых данных больше нет.

Пример кода Python + Selenium:

from selenium import webdriverfrom selenium.webdriver.common.by import Byimport timedriver = webdriver.Chrome()driver.get("https://example.com/feed")last_height = driver.execute_script("return document.body.scrollHeight")while True:# Прокручиваем внизdriver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2)# Проверяем, изменилось ли количество контентаnew_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:breaklast_height = new_heightdriver.quit()

 

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

Кнопки “Загрузить еще”

Некоторые сайты не используют классическую пагинацию или скроллинг, а требуют нажатия кнопки “Загрузить еще”, чтобы подгрузить новые данные.

Для этого нужно:

  1. Найти кнопку загрузки в коде страницы.
  2. Программно кликать по ней с помощью Selenium или Playwright.
  3. Дожидаться подгрузки новых данных и повторять процесс.

Пример кода Python + Selenium:

from selenium import webdriverfrom selenium.webdriver.common.by import Byimport timedriver = webdriver.Chrome()driver.get("https://example.com/products")while True:try:# Находим кнопку и кликаем по нейload_more_button = driver.find_element(By.CLASS_NAME, "load-more")load_more_button.click()time.sleep(2) # Ждём загрузки новых данныхexcept:# Если кнопки нет, значит, данные закончилисьbreakdriver.quit()

 

Этот метод можно использовать при скрапинге интернет-магазинов и каталогов, где контент не грузится автоматически.

Заключение

пагинация при скрапинге

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

Когда данные подгружаются динамически через AJAX, нужно либо эмулировать браузер с помощью Selenium/Playwright, либо анализировать сетевые запросы и напрямую получать JSON-ответы от API. Это более сложный, но эффективный способ, который позволяет обойти рендеринг HTML.

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

А если контент открывается по нажатию кнопки «Загрузить ещё», нужно научиться находить её в HTML-коде и кликать, пока данные не закончатся. Это особенно актуально для интернет-магазинов и маркетплейсов.

Не забывайте про ограничения и защиту от ботов! Некоторые сайты могут блокировать частые запросы, поэтому стоит добавить задержки между запросами или использовать прокси. Наиболее удобным вариантом для вас могут стать резидентные прокси от Froxy. Мы предлагаем более 10 миллионов белых IP-адресов и доступ к глобальной сети из 200+ локаций.

Получайте уведомления о новых функциях и обновлениях Froxy

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

Статьи по Теме

Что такое парсинг данных. Определение и преимущества

Кейсы

Что такое парсинг данных. Определение и преимущества

Узнайте больше о том, что такое парсинг данных. Как работает парсер данных и законно ли его использовать, а также недостатки данного процесса - все...

Команда Froxy 29 июн 2023 6 мин
Что такое парсинг?

Парсинг

Что такое парсинг?

В этом материале расскажем о том, что такое парсинг данных, как работают парсеры и где их можно запускать, для каких задач их применяют и насколько...

Команда Froxy 17 мар 2023 6 мин