Задать вопрос
sjaserds
@sjaserds
Студент

Как работает SaveFrom?

Всем привет. Хотел бы узнать и детально разобраться как на python написать программу которая скачивала бы любое видео с любого сайта. Это не проект! Хотелось бы разобраться как работает например SaveFrom. Укажите на материалы для изучения и хотелось бы разобрать это прям с основ.
  • Вопрос задан
  • 2629 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Универсальный парсер вы не сделаете, каждый сайт по разному отдает контент.
Нужно сделать запрос на страницу с видео и попытаться найти в исходном коде прямую ссылку на видео и загружать с нее.

Примерно выглядит все так:
0. Если у сайта есть API - лучше будет использовать его. Если API имеется - остальные шаги не нужны (конечно, при условии наличия возможности получения прямой ссылки на видео)
1. Открываете страницу с видео

2. Через ctrl+U пытаетесь найти прямую ссылку на видео. Обычно она есть в коде. Если нет - пытаетесь понять как видео загружается на страницу, везде по разному. В примере с тиктоком она тут:
лучше открыть на весь экран картинку
Прямая ссылка
5ef21e375ca6e910600401.jpeg

3. Когда нашли ссылку - проверяете, нужная ли это вам. Далее нужно спарсить ее через bs4/json/re со страницы.
4. Далее уже можно делать запрос на нее с помощью все той же requests и сохранить в файл

Пример для тиктока
import requests
import json
from bs4 import BeautifulSoup

# Ссылка на полную страницу
tiktok_url = 'https://www.tiktok.com/@golden_men_6/video/6803237854542712070'

# Чтобы сайт правильно открылся
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}


# Запрос на страницу с видео
r = requests.get(tiktok_url, headers=headers, allow_redirects=True)

# парсинг страницы, ссылка на видео лежит в скрипте с id videoObject, который является JSON
soup = BeautifulSoup(r.text, 'html.parser')
script = soup.find('script', attrs={'id': 'videoObject'})
data = json.loads(script.text)
video_url = data['contentUrl']

# запрос на прямую ссылку с видео
r = requests.get(video_url)

#запись
with open('video.mp4', 'wb') as f:
    f.write(r.content)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы