Дело было год назад, не помню что я там забыл, но мне определенно хотелось скачать какую‑то картинку с behance.net, но как вы знаете — опции скачать там нет. Зная, как работает веб — я без проблем забрал нужное изображение найдя ссылку в HTML коде, но не все готовы так заморачиваться, поэтому я решил автоматизировать этот процесс.

Так появился python‑модуль behance‑py, который, если верить статистике с pepy.tech, имеет более 5 тысяч установок и расширение для Chrome, о котором чуть позже.

Логика простая, отправляем запрос на ссылку с альбомом, парсим HTML код, находим там нужный объект, содержащий ссылки на картинки. После чего библиотека скачивает локально нужные объекты.

Парсинг HTML и поиск картинок:

raw_html = self._request(link)
tree = BeautifulSoup(raw_html, "html.parser")

for _item in tree.find_all("img"):
	try:
		src_set = _item.get("srcset").split(",")
		for _image in src_set:
			image = _image.strip()
			if image[: len(self.storage_path)] == self.storage_path:
				self.pictures.append(image.split()[0])
	except AttributeError:
		pass

Функция локальной загрузки:

def _download(self, link: str):
	with httpx.stream("GET", link) as response:
		file_name = link.split("/")[-1]
		path_to_save = Path(self.path_to_save) / file_name \
        if self.path_to_save else file_name
		with open(path_to_save, "wb") as image_file:
			for chunk in response.iter_bytes(chunk_size=1024):
				if chunk:
					image_file.write(chunk)

Сохранение альбома:

def download_pictures(self):
	self.check_path_to_save_exist()
	if not self.pictures:
		pass
	for image_url in self.pictures:
		self._download(image_url)

Пример использования:

from pybehance import Behance

EXAMPLE_URL = "https://www.behance.net/gallery/157806987/Folio-Reader-Types"

behance = Behance()
behance = Behance(path_to_save="/path/to/save/example_dir")
data = behance.get_pictures_list(EXAMPLE_URL)
behance.download_pictures()

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

Источник: https://www.behance.net/gallery/157806987/Folio-Reader-Types

Так мы выпустили расширение behace saver для Google Chrome, которое за 10 месяцев набрало более 3 тысяч пользователей и 5 тысяч установок.

Применили аналогичную python-модулю логику, только через добавление кнопки на веб страницу.

Статистика пользователей
Статистика пользователей
Статистика активных пользователей
Статистика активных пользователей

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

Обновление выпустили 2 октября, за это время пользователи скачали 42 тысячи картинок — это больше, чем мы себе представляли. В среднем — 2000 скачиваний в сутки, а это уже та цифра, которую можно визуализировать. Поэтому мы сделали страницу с ежедневной статистикой.

Источник: главная страница https://sbehance.ikolesov.space/
Источник: главная страница https://sbehance.ikolesov.space/

Инфографика

Дополнительная статистика в трех разрезах: Операционная система, Вид браузера и Язык браузера.

Доля загрузок в разрезе OS
Доля загрузок в разрезе OS
Доля загрузков в разрезе браузера
Доля загрузков в разрезе браузера
Доля загрузок в разрезе страны (языка браузера)
Доля загрузок в разрезе страны (языка браузера)

Заключение

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

Тоже самое с автоматизацией, сбором данных и визуализацией статистики. Наша страничка с цифрами и графиками греет душу.

Большое спасибо всем за внимание! Мой телеграм канал artydev & Co — там я рассказываю о других своих проектах,подписывайтесь!

Комментарии (5)


  1. ris58h
    27.10.2023 16:02

    Почему бы не начать собирать статистику

    Спасибо, не надо.


    1. artydev Автор
      27.10.2023 16:02

      Почему нет, данные обезличены, никаких проблем нет


      1. ris58h
        27.10.2023 16:02

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

        Кстати, вы можете посмотреть статистику по использованию вашего расширения в консоли разработчика Гугл. Так, ещё раз, зачем вы их собираете?


        1. artydev Автор
          27.10.2023 16:02
          +1

          У самурая нет цели, только путь.

          Данные, которые я собираю отсутствуют в статистике консоли Гугл, вы как будто не читали, но осуждаете.

          Собираю для визуализации, для меин пейдж расширения


        1. Moonlization
          27.10.2023 16:02
          +1

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