Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import instaloader
- import sys
- import os
- import yt_dlp
- import requests
- from bs4 import BeautifulSoup
- # Функция для скачивания Instagram постов
- def download_instagram_post(post_url):
- loader = instaloader.Instaloader()
- shortcode = post_url.split("/")[-2]
- post = instaloader.Post.from_shortcode(loader.context, shortcode)
- download_dir = 'in_dl'
- os.makedirs(download_dir, exist_ok=True)
- if post.typename == "GraphVideo":
- print(f"Скачиваем видео: {post.video_url}")
- loader.download_post(post, target=download_dir)
- elif post.typename == "GraphImage":
- print(f"Скачиваем изображение: {post.url}")
- loader.download_post(post, target=download_dir)
- elif post.typename == "GraphSidecar":
- print("Скачиваем все медиа из карусели (sidecar).")
- loader.download_post(post, target=download_dir)
- else:
- print("Этот тип поста не поддерживается.")
- # Удаляем ненужные файлы
- for filename in os.listdir(download_dir):
- if filename.endswith('.json.xz') or filename.endswith('.txt'):
- file_path = os.path.join(download_dir, filename)
- os.remove(file_path)
- print(f"Удален файл: {file_path}")
- # Функция для скачивания YouTube видео
- def download_youtube_video(video_url):
- download_dir = 'yt_dl'
- os.makedirs(download_dir, exist_ok=True)
- ydl_opts = {
- 'format': 'bestvideo+bestaudio/best', # Скачиваем лучшее видео и аудио
- 'outtmpl': os.path.join(download_dir, '%(title)s.%(ext)s'),
- 'merge_output_format': 'mkv', # Объединяем в формате MKV
- }
- try:
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
- print(f"Скачиваем видео: {video_url}")
- ydl.download([video_url])
- print("Скачивание завершено!")
- except Exception as e:
- print(f"Произошла ошибка при скачивании: {e}")
- # Функция для скачивания Rutube видео
- def download_rutube_video(video_url):
- download_dir = 'ru_dl'
- os.makedirs(download_dir, exist_ok=True)
- ydl_opts = {
- 'format': 'bestvideo+bestaudio/best', # Скачиваем лучшее видео и аудио
- 'outtmpl': os.path.join(download_dir, '%(title)s.%(ext)s'),
- 'merge_output_format': 'mkv', # Объединяем в формате MKV
- }
- try:
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
- print(f"Скачиваем видео с Rutube: {video_url}")
- ydl.download([video_url])
- print("Скачивание завершено!")
- except Exception as e:
- print(f"Произошла ошибка при скачивании: {e}")
- # Функция для скачивания VK видео
- def download_vk_video(video_url):
- download_dir = 'vk_dl'
- os.makedirs(download_dir, exist_ok=True)
- ydl_opts = {
- 'format': 'bestvideo+bestaudio/best', # Скачиваем лучшее видео и аудио
- 'outtmpl': os.path.join(download_dir, '%(title)s.%(ext)s'),
- 'merge_output_format': 'mkv', # Объединяем в формате MKV
- }
- try:
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
- print(f"Скачиваем видео с VK: {video_url}")
- ydl.download([video_url])
- print("Скачивание завершено!")
- except Exception as e:
- print(f"Произошла ошибка при скачивании: {e}")
- # Новая функция для скачивания Zoom контента
- def download_zoom_content(zoom_url):
- print(f"Обработка Zoom URL: {zoom_url}")
- try:
- response = requests.get(zoom_url)
- if response.status_code == 200:
- download_dir = 'zoom_dl'
- os.makedirs(download_dir, exist_ok=True)
- file_name = os.path.join(download_dir, "zoom_recording.mp4")
- with open(file_name, 'wb') as f:
- f.write(response.content)
- print(f"Запись Zoom успешно скачана: {file_name}")
- else:
- print("Не удалось получить доступ к записи Zoom. Возможно, требуется авторизация.")
- except Exception as e:
- print(f"Произошла ошибка при скачивании Zoom: {e}")
- # Новая функция для скачивания Pikabu контента
- def download_pikabu_content(pikabu_url):
- print(f"Обработка Pikabu URL: {pikabu_url}")
- try:
- # Получаем HTML-код страницы
- response = requests.get(pikabu_url)
- if response.status_code != 200:
- print("Не удалось получить доступ к странице Pikabu.")
- return
- # Парсим HTML с помощью BeautifulSoup
- soup = BeautifulSoup(response.text, 'html.parser')
- download_dir = 'pikabu_dl'
- os.makedirs(download_dir, exist_ok=True)
- # Ищем все элементы с атрибутами data-webm или data-mp4
- video_tags = soup.find_all(attrs={"data-webm": True}) + soup.find_all(attrs={"data-mp4": True})
- if not video_tags:
- print("Видео на странице не найдено.")
- return
- # Скачиваем все найденные видео
- for idx, tag in enumerate(video_tags):
- video_url = tag.get('data-webm') or tag.get('data-mp4')
- if not video_url:
- continue
- print(f"Найдено видео: {video_url}")
- video_response = requests.get(video_url)
- if video_response.status_code == 200:
- video_name = os.path.join(download_dir, f"video_{idx + 1}.webm")
- with open(video_name, 'wb') as f:
- f.write(video_response.content)
- print(f"Скачано видео: {video_name}")
- else:
- print(f"Не удалось скачать видео: {video_url}")
- print("Скачивание с Pikabu завершено!")
- except Exception as e:
- print(f"Произошла ошибка при скачивании с Pikabu: {e}")
- # Основной блок программы
- if __name__ == "__main__":
- if len(sys.argv) != 2:
- print("Использование: python download_video.py <URL_поста>")
- sys.exit(1)
- url = sys.argv[1]
- if "instagram.com" in url:
- download_instagram_post(url)
- elif "youtube.com" in url or "youtu.be" in url:
- download_youtube_video(url)
- elif "rutube.ru" in url:
- download_rutube_video(url)
- elif "vk.com" in url:
- download_vk_video(url)
- elif "zoom.us" in url:
- download_zoom_content(url)
- elif "pikabu.ru" in url:
- download_pikabu_content(url)
- else:
- print("Поддерживаются только URL Instagram, YouTube, Rutube, VK, Zoom и Pikabu.")
Advertisement
Add Comment
Please, Sign In to add comment