как скачивать файлы с яндекс диска
есть файл: https://yadi.sk/d/xsjJ3dEqb4pvlQ (он открыт) как мне его скачать? не нужна авторизация и т.п.
Ответы (3 шт):
Вот код для скачивания опубликованного файла. (Ваша ссылка почему-то нерабочая, я для примера вставил свою ссылку. Замените её на свою рабочую, когда она у вас будет)
import requests
from urllib.parse import urlencode
base_url = 'https://cloud-api.yandex.net/v1/disk/public/resources/download?'
public_key = 'https://yadi.sk/d/UJ8VMK2Y6bJH7A' # Сюда вписываете вашу ссылку
# Получаем загрузочную ссылку
final_url = base_url + urlencode(dict(public_key=public_key))
response = requests.get(final_url)
download_url = response.json()['href']
# Загружаем файл и сохраняем его
download_response = requests.get(download_url)
with open('downloaded_file.txt', 'wb') as f: # Здесь укажите нужный путь к файлу
f.write(download_response.content)
Загрузка .csv в DataFrame Pandas с Яндекс диска без авторизации, при наличии публичных ссылок на папку и файл
Библиотеки:
import pandas as pd
import requests
import urllib
import json
Публичные ссылки(на файл и папку можно скопировать при публикации):
folder_url = 'https://yadi.sk/d/my_folder_hash'
file_url = 'file.csv'
url = 'https://cloud-api.yandex.net/v1/disk/public/resources/download' + '?public_key=' + urllib.parse.quote(folder_url) + '&path=/' + urllib.parse.quote(file_url)
Подготовка ссылки на скачивание:
r = requests.get(url) # запрос ссылки на скачивание
h = json.loads(r.text)['href'] # 'парсинг' ссылки на скачивание
Загрузка данных в DataFrame:
df = pd.read_csv(h, sep=';', error_bad_lines=False, comment='#' , encoding='cp1251')
Нужно понимать корректный разделитель и кодировку, у меня это sep=';' и encoding='cp1251'.
Немного поменял вариант от @Xander. Mожно не сохранять каждый раз файл на диске, а просто прочитать его через виртуальный файл с io.
Вот вот мой вариант с эксель таблицей:
import requests
from urllib.parse import urlencode
import pandas as pd
import io
base_url = 'https://cloud-api.yandex.net/v1/disk/public/resources/download?'
public_key = 'https://disk.yandex.ru/i/....' # Сюда вписываете вашу ссылку
# Получаем загрузочную ссылку
final_url = base_url + urlencode(dict(public_key=public_key))
response = requests.get(final_url)
download_url = response.json()['href']
# Загружаем файл и читаем в датафрейм
download_response = requests.get(download_url)
df = pd.read_excel(io.BytesIO(download_response.content), engine='openpyxl')
df.head(3)