Недавно в нашем телеграм чате был задан вопрос о том, как с помощью A-Parser можно скачать картинки со всего сайта. Также с похожими вопросами часто обращаются пользователи в техническую поддержку. Поэтому мы подготовили подробную статью с детальным описанием настройки и скриншотами решения.
Данную задачу лучше разделить на 2 этапа: парсинг ссылок на картинки и скачивание картинок по ссылкам. Ниже будут рассмотрены оба этапа.
Этап 1: парсинг ссылок на картинки
Есть несколько способов собрать ссылки на картинки со всего сайта. Первый заключается в "слепом" обходе всего сайта в глубину и сборе всех ссылок, указанных в атрибуте src тега img. Второй способ предполагает изучение сайта и составление пресета, который пройдет только по нужным страницам и соберет ссылки только на нужные картинки. Рассмотрим оба способа более детально. В качестве "подопытного" возьмем сайт РИА Новости, а для упрощения задачи будем парсить только его раздел "В мире".
Способ 1: обход всего сайта
Используем парсер HTML::LinkExtractor. С его помощью довольно легко можно настроить проход по внутренним ссылкам вглубь и параллельно собрать любые данные со страниц.
В данном случае настройка максимально простая: задаем глубину парсинга и прописываем регулярное выражение для сбора ссылок из <img src="...">. Также указываем в Формате результата выводить собранные ссылки и обязательно включаем уникализацию запросов (чтобы не парсер не зацикливался на перекрестных ссылках) и уникализацию результатов по строке (чтобы исключить дубли ссылок из результатов).
Можно также более тонко настроить пресет, исключив из обхода какие-то ссылки и/или фильтруя собираемые результаты, но это уже зависит от конкретного сайта и задачи, поэтому на этом моменте не будем останавливаться.
В результате будет получен большой список ссылок:
Если его изучить, то становится видно, что здесь есть как ссылки на ресурсы страницы (например анимация загрузки), так и ссылки на превью картинок разных размеров. Это один из минусов данного способа, особенно если нужно собрать только полноразмерные иллюстрации к статьям. Также к недостаткам можно отнести довольно длительную работу пресета, это связано с тем, что парсер обходит очень большое количество страниц и далеко не везде есть уникальные картинки. Зато несомненным плюсом данного способа является его простота реализации, буквально в несколько кликов, а также универсальность, т.к. его можно применять почти для любых сайтов.https://cdnn21.img.ria.ru/images/07e4/0b/1e/1587007077_0:322:3068:2048_600x0_80_0_0_ae70531c16d1b3aad864602f2d18f7fd.jpg.webp
https://cdnn21.img.ria.ru/images/07e4/0c/1e/1591554327_0:172:3066:1897_600x0_80_0_0_3124f4b39563d2382fcd35b38398de9d.jpg.webp
https://cdnn21.img.ria.ru//i/loader.svg
https://cdnn21.img.ria.ru/images/155740/38/1557403806_0:21:413:434_100x100_80_0_0_3c82cf7de501c3afefa1fc6540b7a94e.jpg.webp
https://cdnn21.img.ria.ru/images/150008/38/1500083879_0:0:1946:1095_600x0_80_0_0_9954b39de9c79cb786b4eab599e40ad9.jpg.webp
https://cdnn21.img.ria.ru//i/loader_white.svg?
https://cdnn21.img.ria.ru/images/07e5/07/1e/1743633588_0:321:3072:2048_1920x0_80_0_0_5d9d629fe55de460f2ca378ed266d42e.jpg.webp
https://cdnn21.img.ria.ru/images/07e5/0b/01/1757283420_0:0:3072:1728_1920x0_80_0_0_6707316917dd563fe70fdad87d9400ee.jpg.webp
Код:eJxtVN9v2jAQ/lfQCalFRdA+7CXaJtGqaJtoYZQ+QSpZ5Mi8OnZmOxQU5X/fnRMS uvUpuc933333wy7BC/fqFhYdegfRuoQ8/EMEC2Ed9mQmUuwpqV9db38DQ8gZtuy7 hm+rh1kUzejw/uCt2HpjySPBnSiUh2EJ/pgjUW0L5022RBdgsPVPBInwItgpHsj8 LLN0/fI1vnJ2+2UDl+uXDcRXg5PHqiZLW4YGENaKI4Hh+ygyxoJs13qy3BqDuOp0 mdxLo9lNJmSG0ma4R0XIXqiCfG6uqzhuaabGZoKV9/ObUZ1jtAvY5UU/2JuNvhh0 eZ/EHleGAnZSYQdPyWqU9qkJyKcnosHIH7hLIkkkyxOqzso1dEqetfzD+sB5KzX3 hEwr0U2tyQj2GEgYPJ5Ur6EfbCCaIsT/rGMg8rbAIThSOxWkJWkPdkI5OpEeraDx zpuORSUYPVEqdKtzC/S3hVQJrchkR0Hfm8CPXeb/cVRtheep9mjfLGloWYJ1O3/o ohIzMykVrg2VrWQmPdnuzhSa53VN4Cti3rbtkd0yY7FN0zA32elK5Kh5K7qpTfIO elfGu8m8B7dG72Q6pwKsTPDkWegV3bu5vjNZrpDr0oVSNBWHy25DJq4ZAxudwH+D 70IKvk6niwfeGOV+PNVScytpAz+xwIw6eZ61odwKpZ6Xs/MT6DaKjF/e5y4aj60U I1uM34xVyRg40GNqaKP45QgrF8H9QTAJ3yo85EInmNT7VcVV3L4f7ZNTfviKRGVF M/3tFrU3N4B9CaNOOhoY3czqLxrgqEo=
Способ 2: составление кастомного пресета
В первую очередь необходимо немного изучить сайт-источник и продумать необходимый алгоритм работы.
Итак, наша главная цель - собрать ссылки на иллюстрации к статьям. Открыв источник, мы видим список новостей и кнопку загрузки следующей страницы.
Полноразмерные иллюстрации доступны внутри каждой новости, а также на странице со списком новостей присутствует пагинация для подгрузки очередной порции новостей. Таким образом нам необходимо чтобы парсер листая страницы пагинации зашел в каждую новость и уже оттуда забрал ссылку на изображение.
Это не сложная задача для встроенного парсера Net::HTTP, который является универсальным решением для множества задач. Также необходимо будет использовать многоуровневый парсинг, чтобы реализовать заход в каждую новость.
В целом настройка заключается в указании регулярных выражений для сбора ссылок на новости, получения ссылки на следующую страницу и получения ссылок на картинку из новости.
Как видно на скриншоте, в Формате результата используется шаблон, реализующий тот самый многоуровневый парсинг с помощью инструмента tools.query.addAll() и вывод результата:
Также нужно включить уникализацию результатов и, желательно, запросов.Код:[% IF query.lvl == 0; tools.query.addAll(p1.news, 'link'); ELSE; p1.images.format('$image\n'); END %]
В итоге также будет получен список ссылок, но в отличие от первого способа, здесь уже будут ссылки только на полноразмерные иллюстрации:
Отсутствие различного мусора - это однозначное преимущество данного способа. Второй плюс заключается в том, что пресет, по сравнению с первым способом, отработает гораздо быстрее, т.к. ему не нужно обходить множество "лишних" страниц. К минусам можно отнести более сложную настройку и подготовку, которые требуют определенных навыков в решении таких задач.
https://cdnn21.img.ria.ru/images/07e5/0b/1c/1761134279_0:320:3072:2048_1920x0_80_0_0_fbccc8226588a518bd591cc9bfbaddf8.jpg.webp
https://cdnn21.img.ria.ru/images/07e5/0b/19/1760663358_0:322:3070:2048_1920x0_80_0_0_bde4e27133ea68157cb23969b944420a.jpg.webp
https://cdnn21.img.ria.ru/images/151611/33/1516113387_0:240:4608:2832_1920x0_80_0_0_b68ca6b3461327d0d6af94d83d8f3c77.jpg.webp
https://cdnn21.img.ria.ru/images/07e4/0b/02/1582621552_0:320:3072:2048_1920x0_80_0_0_ccd02626592a822f716058630ae05471.jpg.webp
Код:eJyVVW1TGjEQ/is3GR2hIqAz/XKtOkhlaocCKn4CZDLcgim5y5nkAIfy37ubewPb fvDT3W727dl9Ntkyy83SDDQYsIb5oy2L3T/z2YBrA54I+QI8KaKl8VYXrMZiUmuy HbEeWN//PhwOUB/AnCfSstqW2bcYMIBagdYiADwUAcoLpYK2cvKKywRNRhfN5mRX eswSY1X4AMYFYjr98VnALXfyAjYovmiYX45ZZfQ8ZpPT6uj5anI6k9wYVEph7Jmw EE6nVlgJudswzbAowmYKrjV/Q6X79nhIugjWprAjpIzws/1KVWyFikwObfYCs2UP NnaA3Srxscq1f1BYqDSMmSuYMJ0lWv52PxH6klTdw0VVBYGgRFwyf3uYpStCQb1p st3/64rRsGV6sL5PQL+VhVmdwPvoS4DYmXVhBahp7j4+mRxs/KKsWglYT6cqhiiF /Omqfnr9VYQLh9/o2SHWD4/JUfPdoJwOJzWZFOqO0iGnWkfH3l3HeyWIdbmS3uWl 1/wyjsbWKiVNPT3AnrSkrMTndWJBzTuh0Z9U0e62+3jrzPEsTV2fu9CVkyMnj8dR atj75h1Pyroe+QqGCguYi4yPaV0oZUiOsI1Ap3nEat1u7MH8UxSEsUT2FIlXRzNj tYioZ4RBgOloFaLaggvigOVdGLEjJzMMkzj/+9QnJ4XBajscawmKgzmXBk9wqzS3 SvczjiFnVITNcnwpzVz4m0TIAK+J1hyd7jLHf5v0/4qxKxDup8LbZK2xhiKKk276 P0uvQHXVghZYIWxJC4KyaaskSjel5khetK1HZrSSRZoscpYdr0UkL+1RObVWXKoO YBxM5lA5U9FcLPrZdZhbJtEQ795+1FZhLIFwRYmUOBUDDyVDWiYbAwllge+d2y4F LWR+DTPH6h+PaamxFsjAz1RgiJ3cz5qFnHEpnx66+yesZBTdutbGxm80tOB1nTTW SsugwcjRwkIho+j1cJTz2e2GUxBaTtjEPAogSPm1w9Us3pDi2dnuvST+Fu8d9ssM UhuCTRaow/4ZHBPzz3d/ADSaUYo=
Какой способ использовать?
Оба способа одинаково успешно можно использовать для сбора списка ссылок на картинки из сайтов. У каждого есть свои недостатки и преимущества. В целом, выбирая какой способ использовать, нужно учитывать нюансы конкретной задачи. Для рассматриваемой же задачи я бы предпочел второй способ.
Этап 2: скачивание картинок по ссылкам
Теперь, имея список ссылок на картинки, можно переходить непосредственно к их скачиванию. Для этого лучше всего воспользоваться уже готовым и доступным в нашем Каталоге парсером: Скачивание картинок. Этот парсер позволяет не только скачать картинки, а и определить "на лету" их размеры и ориентацию, а также сформировать отчет со списком загруженных файлов, благодаря чему по окончании работы можно будет проанализировать какие картинки были собраны. Также он умеет определять формат картинок и генерирует имена файлов на основе md5 ссылок, благодаря чему не возникнет проблем с сохранением с неправильным разрешением или ошибками из-за запрещенных символов в имени файла.
Заключение
В этой статье рассмотрены 2 способа сбора ссылок на изображения из сайта, а также комплексно дан ответ по решению задачи скачивания картинок со всего сайта. Рассмотрены плюсы и минусы каждого способа, а также их результативность. В целом для решения данной задачи достаточно начальных навыков работы с А-Парсером.
-
Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!Скрыть объявление
Скачивание всех изображений из сайта
Обзор способа получения всех картинок определенного сайта