Устали от того, что IP-блокировки тормозят вашу работу? Воспользуйтесь нашими прокси-серверами из частных сетей для высокоскоростной ротации или безопасными прокси-серверами от интернет-провайдеров, чтобы обеспечить максимальный срок службы аккаунта.
Сбор изображений кажется делом простым — найти URL-адреса, скачать файлы. На практике же современный Интернет усложняет практически каждый этап этого процесса больше, чем следовало бы: галереи загружаются по мере прокрутки, URL-адреса изображений подписываются CDN, версия с максимальным качеством скрыта за эффектом наведения курсора, а любой сайт, который стоит сканировать, оснащён средствами защиты от ботов, которые обнаружат наивный скрипт уже через несколько сотен запросов.
В этом руководстве рассмотрены методы, которые действительно работают в 2026 году — от разовых расширений для браузеров до производственных конвейеров на Python, а также те аспекты, которые чаще всего упускаются в большинстве учебных материалов: работа с контентом, рендерируемым с помощью JavaScript, обход защиты от несанкционированного использования ссылок, а также правовые и этические аспекты, которые становится всё сложнее игнорировать.
Выберите подходящий способ в зависимости от того, сколько вам действительно нужно
Существует примерно четыре уровня извлечения изображений, и выбор подходящего инструмента зависит от объема данных, целевой аудитории и частоты выполнения этой задачи.
Уровень 1 — Однократное использование, небольшой объем, один сайт. Воспользуйтесь расширением для браузера или щелкните правой кнопкой мыши и сохраните файл. Все остальное — излишне.
Уровень 2 — от десятков до сотен изображений с одного сайта. Специализированная программа для извлечения изображений или простой скрипт на Python, обрабатывающий одну страницу.
Уровень 3 — Тысячи изображений на множестве страниц или сайтов. Настоящий скрипт для сбора данных с надлежащим ограничением частоты запросов, алгоритмом повторных попыток и хранилищем.
Уровень 4 — Непрерывный сбор данных в больших объемах (обучающие данные для машинного обучения, постоянные маркетинговые исследования). Производственный конвейер с чередующимися прокси-серверами, поддержкой браузеров без графического интерфейса и хранилищем реальных данных.
В большинстве статей на эту тему эти понятия смешиваются. Правильный подход для уровня 1 действительно отличается от подхода для уровня 4, а не является просто его уменьшенной версией.
Уровень 1: Расширения для браузеров
Если нужно скачать дюжину изображений с одной страницы, расширение для браузера по-прежнему остаётся самым быстрым способом. Вот те, которые стоит установить сегодня:
- Image Downloader (Chrome) — простая массовая загрузка с фильтрацией по размерам и типу файлов. Наиболее близкое к универсальному стандарту решение.
- Imageye (Chrome, Edge) — аналогичный набор функций, удобный интерфейс фильтрации по размеру и формату.
- DownThemAll! (Firefox) — давняя классика, которая до сих пор поддерживается и поддерживает не только изображения, но и другие типы файлов.
Избегайте расширений, которые не обновлялись более года (многие инструменты для загрузки «двойным щелчком» поколения 2020 года сейчас либо заброшены, либо незаметно содержат вредоносный код — магазин расширений Chrome уже давно превратился в кладбище). Перед установкой чего-либо проверьте дату последнего обновления.
Предел любого расширения: вам всё равно приходится загружать каждую страницу самостоятельно. Как только количество изображений превысит несколько сотен, у вас начинают сводить руки судорогой.
Уровень 2: Программы для извлечения изображений и инструменты без графического интерфейса
Шаг вперед по сравнению с расширениями: инструменты, которые по URL-адресу извлекают все изображения с отображаемой страницы. Большинство из них ограничены одним сайтом за раз, но берут на себя всю работу по переходу по ссылкам.
Для разовых заданий самым простым вариантом зачастую является просто wget из командной строки:
bash
wget -r -l 2 -A jpg,jpeg,png,webp,gif --no-parent https://example.com/gallery/
Эта программа рекурсивно загружает изображения из URL-адреса на глубину двух уровней, отфильтровывая файлы по типам изображений. Она входит в состав всех дистрибутивов Linux уже 25 лет и по-прежнему подходит для статических сайтов. Для Windows аналогом является curl или PowerShell’s Invoke-WebRequest.
Для сайтов, на которых вы предпочитаете обходиться без написания скриптов, хорошо себя зарекомендовали инструменты, не требующие программирования: Octoparse (по-прежнему надежный, модель «фримиум»), Apify (больше ориентирован на разработчиков, представляет собой маркетплейс готовых скрейперов, включая специализированные для работы с изображениями), Bardeen (более новое решение, основанное на браузерных расширениях, интегрируется с другими инструментами для организации рабочих процессов). ParseHub уже не является столь очевидным выбором, как три года назад — условия бесплатного тарифа значительно ужесточились.
Эти инструменты обеспечивают пагинацию, базовую визуализацию с помощью JavaScript и экспорт в формате CSV. Однако они перестают работать на сайтах с усиленной защитой или на любых ресурсах с бесконечной прокруткой, доступ к которым ограничен авторизацией.
Уровень 3: Python — язык по умолчанию для практикующих разработчиков
Если нужен действительно большой объем, напишите код сами. Стек Python, который будет надежно работать в 2026 году, выглядит следующим образом:
requests— загружает страницы и скачивает файлы изображенийBeautifulSoup— анализирует HTML и находит<img>теги иsrcsetатрибутыPlaywright— запускает настоящий браузер без графического интерфейса, если для отображения изображений на сайте требуется JavaScriptPillow— обрабатывает загруженные изображения (изменение размера, удаление дубликатов, проверка формата)
Основной алгоритм работы со статической страницей:
python
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import os
url = "https://example.com/gallery"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"}
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, "html.parser")
os.makedirs("images", exist_ok=True)
for img in soup.find_all("img"):
src = img.get("src") or img.get("data-src")
if not src:
continue
full_url = urljoin(url, src)
filename = os.path.join("images", os.path.basename(full_url.split("?")[0]))
with open(filename, "wb") as f:
f.write(requests.get(full_url, headers=headers).content)
Это краткая версия на 30 секунд. На практике вам придётся учитывать несколько факторов:
- Изображения с отложенной загрузкой жить в
data-src,data-original, или аналогичные атрибуты, а неsrc— проверьте страницу, прежде чем доверять её разметке. srcsetатрибуты поддерживать несколько вариантов разрешения для адаптивных изображений. Версия с самым высоким качеством зачастую не является той, котораяsrcна что указывает; анализироватьsrcsetчтобы схватить самого крупного.- Галереи, отображаемые с помощью JavaScript не будет отображаться в
requestsвывода вообще нет. Переключитесь на Playwright, дождитесь, пока галерея отобразится, а затем извлеките данные из DOM. - Срок действия подписанных URL-адресов CDN истекает — если вы соберете URL-адреса за один раз, а скачаете их позже, вас ждут ошибки 403. Скачивайте по мере обнаружения.
- Защита от несанкционированного использования ссылок отклоняет запросы, поданные без соответствующих прав
Refererзаголовок. Передайте URL-адрес исходной страницы в качествеRefererи большинство из них проходят.
Для сбора данных с помощью Playwright:
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com/gallery")
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
page.wait_for_timeout(2000)
image_urls = page.eval_on_selector_all(
"img",
"elements => elements.map(el => el.src)"
)
browser.close()
Это позволяет реализовать механизм «прокрутка для загрузки дополнительных элементов», который мешает работе простых скриптов-парсеров в большинстве современных галерей изображений.
Уровень 4: Сбор данных в промышленных масштабах
Как только количество обрабатываемых изображений за один прогон превышает несколько тысяч или вы запускаете задачи по сбору данных в непрерывном режиме (наиболее распространенные случаи: формирование набора данных изображений для обучения моделей машинного обучения, мониторинг визуальных ресурсов конкурентов или курирование контент-каналов в больших объемах), возникают новые узкие места.
Проблема уже не в сценарии. Проблемы заключаются в следующем:
Ограничение скорости и блокировка IP-адресов. Любой уважающий себя сайт заблокирует отдельный IP-адрес, с которого поступает более нескольких запросов в минуту. Решением этой проблемы является использование ротируемых прокси-серверов из частных сетей — IP-адресов, присвоенных реальным домашним пользователям, трафик с которых неотличим от обычного пользовательского. Прокси-серверы из центров обработки данных в данном случае не подходят; крупные хостинги изображений и платформы электронной коммерции по умолчанию помечают диапазоны IP-адресов центров обработки данных.
Контент с географическими ограничениями. Некоторые изображения отображаются только в определенных регионах (лицензионные спортивные снимки, региональные фотографии товаров). Для этого используется таргетинг по прокси-серверам на уровне страны; в случае действительно локализованного контента важен таргетинг на уровне города.
Хранение и дедупликация. Загрузка 100K изображений размером по 200KB каждое составляет 20GB. Хеширование каждого изображения по мере загрузки (простой hashlib.md5(content).hexdigest()) позволяет пропускать дубликаты без ведения параллельной базы данных имен файлов.
Алгоритм повторных попыток. Сети дают сбои, CDN ограничивают пропускную способность, браузеры вылетают. Обеспечьте для каждой загрузки механизм повторных попыток с отсрочкой и регистрируйте сбои в журнале, а не завершайте работу из-за них.
Параллелизм. Используйте aiohttp с asyncio для задач, связанных с интенсивной загрузкой файлов. Простой последовательный скрипт, загружающий 10K изображений со скоростью 200 мс на запрос, работает 33 минуты; асинхронная версия занимает менее минуты (при условии, что источник способен это выдержать — не перегружайте чужой сервер).
Для проектов этого уровня инфраструктура прокси имеет большее значение, чем сам скрипт для сбора данных. Скрипт состоит из 100 строк, которые вы напишете за один день. Надежные, сменяющиеся IP-адреса из частных сетей — вот что на самом деле определяет, будет ли задача выполнена до конца или застрянет на 30 % из-за блокировки IP-адреса.
Здесь как раз подходит IPBurger — ротация прокси-серверов из частных сетей, таргетинг по странам, фиксированные сессии, когда это необходимо — и общий вывод остается верным независимо от провайдера: на этом уровне именно прокси-слой несет основную нагрузку.
То, что большинство руководств упускает из виду: правовые и этические аспекты
Извлечение изображений — одна из самых неоднозначных с юридической точки зрения областей веб-парсинга, что обусловлено несколькими конкретными причинами, которые за последние два года стали ещё более очевидными:
Авторское право по умолчанию распространяется на изображения. В отличие от текстовых фрагментов, где принцип добросовестного использования предоставляет больше свободы, воспроизведение изображений, как правило, регулируется авторским правом. Тот факт, что изображение находится в открытом доступе в Интернете, не дает права на его копирование и распространение. В случае коммерческого использования это представляет собой реальный риск; что касается наборов данных для обучения моделей машинного обучения, то это активная и нерешенная область права.
Условия предоставления услуг часто прямо запрещают скрапинг. Нарушение условий предоставления услуг, как правило, не является уголовным преступлением, но может повлечь за собой гражданско-правовые последствия, а также привести к блокировке ваших аккаунтов и IP-адресов. Ознакомьтесь с условиями предоставления услуг любого сайта, с которого вы осуществляете скрапинг в больших объемах.
Закон ЕС об искусственном интеллекте и аналогичные нормативные акты начинают предъявлять требования по раскрытию информации об источниках данных, использованных для обучения моделей ИИ. Если вы занимаетесь сбором данных для машинного обучения, задокументируйте, откуда были получены данные и как они были собраны.
Некоторые материалы запрещены к публикации независимо от их технической доступности. Изображения, на которых можно опознать конкретных людей, особенно несовершеннолетних, категорически запрещены — даже если страница является общедоступной. В данном случае действуют нормы законодательства о защите персональных данных (GDPR, CCPA).
Практическое правило: если вам было бы неловко объяснять свою операцию по сбору данных судье или юристу сайта, не делайте этого. Если же вы можете четко объяснить свои действия — «мы собираем общедоступные изображения товаров для сравнения цен, соблюдая правила файла robots.txt, ограничивая частоту запросов и указывая источники» — то, скорее всего, у вас все в порядке.
Разумный рабочий процесс по умолчанию
Если вы сегодня приступаете к проекту по сбору изображений и не уверены, какой тарифный план вам нужен, вот вариант, который можно масштабировать:
- Просмотрите страницу в инструментах разработчика браузера. Узнайте, где на самом деле находятся URL-адреса изображений. Статические
src?srcset?data-src? Фоновые изображения в CSS? Это 10-минутное исследование сэкономит вам часы работы в будущем. - Попробуйте
wgetили небольшойrequests + BeautifulSoupСначала скрипт. Если изображения отображаются без помех, то всё готово. - Если при рендеринге с помощью JavaScript возникают сбои, перейдите на Playwright. Браузеры без графического интерфейса работают медленнее, но обрабатывают всё, что видит реальный пользователь.
- Если вы начнете получать ошибки 403 или 429, добавьте уровень прокси-серверов для частных пользователей. Не пытайтесь перехитрить систему защиты от ботов, бесконечно настраивая заголовки; как только сайт определил ваш IP-адрес, он останется в списке заблокированных.
- Добавляйте дедупликацию, алгоритмы повторных попыток и поддержку параллелизма только тогда, когда объем данных оправдывает такую сложность. Не создавайте производственный конвейер с самого первого дня.
Большинство проектов по сбору изображений заканчиваются провалом на четвёртом этапе — не потому, что написание скриптов сложно, а потому, что оператор пытается использовать IP-адреса дата-центров там, где требуются IP-адреса частных пользователей, тратит на это три дня и в итоге сдаётся. Выберите правильную инфраструктуру с самого начала, и всё остальное будет проще простого.
Успех вашего бизнеса напрямую зависит от времени безотказной работы ваших прокси-серверов. Перейдите на статические прокси-серверы бизнес-класса от интернет-провайдера, чтобы обеспечить выделенную пропускную способность и непоколебимую надежность. ИЛИ внедрите ротирующиеся прокси-серверы для частных пользователей и достигните коэффициента успешности сбора данных на уровне 99,9%.
