Дело было год назад, не помню что я там забыл, но мне определенно хотелось скачать какую‑то картинку с 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()
Но опять — это не для всех, хотелось чтобы даже неподкованный пользователь имел доступ к некой «кнопке скачать», которая решала бы его проблему.
Так мы выпустили расширение behace saver для Google Chrome, которое за 10 месяцев набрало более 3 тысяч пользователей и 5 тысяч установок.
Применили аналогичную python-модулю логику, только через добавление кнопки на веб страницу.
Почему бы не начать собирать статистику, подумали мы и добавили в новой версии функцию с отправкой POST запроса, включающая 5 параметров: альбом, автор, операционную систему, вид браузера и его язык.
Обновление выпустили 2 октября, за это время пользователи скачали 42 тысячи картинок — это больше, чем мы себе представляли. В среднем — 2000 скачиваний в сутки, а это уже та цифра, которую можно визуализировать. Поэтому мы сделали страницу с ежедневной статистикой.
Инфографика
Дополнительная статистика в трех разрезах: Операционная система, Вид браузера и Язык браузера.
Заключение
Не знаю как у вас, но у меня разработка таких мини проектов вызывает внутреннее удовлетворение от того, что их используют люди, а значит это решает какую‑то их проблему, быстро и бесплатно.
Тоже самое с автоматизацией, сбором данных и визуализацией статистики. Наша страничка с цифрами и графиками греет душу.
Большое спасибо всем за внимание! Мой телеграм канал artydev & Co — там я рассказываю о других своих проектах,подписывайтесь!
ris58h
Спасибо, не надо.
artydev Автор
Почему нет, данные обезличены, никаких проблем нет
ris58h
Похоже, что сбор данных никак не связан с работой самого расширения. С какой целью вы собираете эти данные?
Кстати, вы можете посмотреть статистику по использованию вашего расширения в консоли разработчика Гугл. Так, ещё раз, зачем вы их собираете?
artydev Автор
У самурая нет цели, только путь.
Данные, которые я собираю отсутствуют в статистике консоли Гугл, вы как будто не читали, но осуждаете.
Собираю для визуализации, для меин пейдж расширения
Moonlization
Какие же душнилы. Ну собрал статистику, просто по фану, что вы докапались до этой статистики, суть статьи не в этом даже, а в том, что вот так прикольно, решая свои какие-то задачки на своём пути можно сделать неплохой проект, который помогает людям.