393

Парсим яндекс диск при помощи Python

В данный момент я работаю контент-менеджером в "крупном" интернет - магазине. В моём случае, это больше 100 000 позиций.

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

Готового решения я не нашел и решил написать свою реализацию работы с яндекс диском. Хорошо, что я знаю python.

У меня было 2 версии программы:

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

  2. когда по ссылке идёт только одна картинка, в данном случаи все немного проще, не нужны лишние действия с распаковкой картинок

p.s. ещё были 2 побочные небольшие программки: 1-я для уменьшения размера картинки, 2-я для переименования картинок (менялся пробел на дефис)

Приступим к реализации

  1. скачать и установить python c официального сайта https://www.python.org/downloads

  2. открыть любимый редактор кода (я использую vscode) https://code.visualstudio.com

  3. подключить следующие стандартные библиотеки: urllib.parse, csv, os, zipfile. Установить библиотеку requests https://pypi.org/project/requests/ (для отправки запроса на сервер)

  4. для полного фен-шуя можно использовать виртуальное окружение, дабы не засорять систему ненужными пакетами. Подробнее о virtualenv можно ознакомится по ссылке https://docs.python.org/3/tutorial/venv.html или же использовать poetry.

Ссылки на яндекс диск имеют вид: https://disk.yandex.ru/d/xNBn7lE1_Y5knQ. Чтобы их можно было скачать, они должны быть публичными.

Обратимся к API яндекс. После ключа public_key="вставляем_ссылку_на_файл"

https://cloud-api.yandex.net/v1/disk/public/resources/downlo...https://disk.yandex.ru/d/xNBn7lE1_Y5knQ

В ответе мы получаем json, из которого нам нужно получить значение по ключу href. Полученное значение и будет нашей прямой ссылкой к файлу.

Пожалуй, на этом хватит теории, теперь, постараюсь внятно объяснить, как всё это можно применить в контексте python.

# создаем новый файл и подключаем нужные нам библиотеки

import requests

from urllib.parse import urlencode

import csv

import os

import zipfile

Для начало создадим функцию, которая будет возвращать нам ссылку для скачивания:

final_url = base_url + urlencode(dict(public_key=public_link))

response = requests.get(final_url)

parse_href = response.json()['href']

return parse_href

Файлы могут быть в разных форматах: ссылки могут быть на одну или несколько картинок. В первом случае можно напрямую скачивать картинку по ссылке. Во втором, если по ссылке несколько картинок, то при скачивании мы получаем архив, который требует дополнительных действий (распаковку).

resources = "https://cloud-api.yandex.net/v1/disk/public/resources?"

requests_url = resources + urlencode(dict(public_key=public_link))

r =  requests.get(requests_url)

type_file = r.json()['type']

return type_file

Далее, мы скачиваем файлы и в зависимости от его типа выполняем действия: просто записываем в результирующий файл или же переходим к его распаковке с последующей записью.

В итоге, мы получаем файл result_data.csv со ссылками на фотографии на нашем жестком диске:

В добавок, у нас на жёстком диске появляется папка со скаченными картинками в папке download_files.

Полностью посмотреть код можно в репозитории на гитхаб.

p.s. Официальная документация по API Яндекс. Диска

Братишка с пикабу подсказал готовую библиотеку на питоне. Спасибо b4ro тык.

p.s.s. Немного поразмышляв, я подумал, что неплохо было бы написать, тесты. Пройтись линтером по коду. Добавить функцию переименования файлов. Может быть что-нибудь ещё?)

Спасибо за прочтение! Комментарии, лайки, дизлайки, предложения, пожелания крайне приветствуются.

Вы смотрите срез комментариев. Показать все
12
Автор поста оценил этот комментарий

response = requests.get(final_url)

parse_href = response.json()['href']

Так верстают только мудаки!

Где проверка на response.status_code == 200? Яндекс тебе пятисотнет в ответ и все, привет передавать скрипту?

А что, если json не передал яндекс? Где проверка на None, а лучше на dict?

Почему в словаре обращение не через get('href')?

Почему в try не завернуто?


Короче код-ревью не пройден, переделывай и принеси нормально!

раскрыть ветку (8)
3
DELETED
Автор поста оценил этот комментарий

С учетом того что КПД кода плавает возле нуля, то и нести не надо.

раскрыть ветку (4)
4
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

может покажешь свой код?) кинь ссылку на гитхаб

раскрыть ветку (2)
4
DELETED
Автор поста оценил этот комментарий

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


import datetime


print('Hello world!')

print(datetime.datetime.now())


Наручные часы - прошлый век, смартфоны - пожирают мозг. Будь умнее! Используй скрипт!


Ну, убедил?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

супер) питон можно даже в хроме установить как расширение. А точное время всегда нужно)

0
Автор поста оценил этот комментарий

я ещё только учусь)

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

ТС воспринимай критику, это норма))) я так скажу - ты уже делаешь БОЛЬШЕ чем умею я! Удачи тебе бро))

0
Автор поста оценил этот комментарий

Так я и не против, с удовольствием укажу на недостатки и подскажу, как их исправить. Главное переделать код по всем правилам, а не забить.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества