Универсальный парсер вы не сделаете, каждый сайт по разному отдает контент.
Нужно сделать запрос на страницу с видео и попытаться найти в исходном коде прямую ссылку на видео и загружать с нее.
Примерно выглядит все так:
0. Если у сайта есть API - лучше будет использовать его. Если API имеется - остальные шаги не нужны (конечно, при условии наличия возможности получения прямой ссылки на видео)
1. Открываете страницу с видео
2. Через ctrl+U пытаетесь найти прямую ссылку на видео. Обычно она есть в коде. Если нет - пытаетесь понять как видео загружается на страницу, везде по разному. В примере с тиктоком она тут:
лучше открыть на весь экран картинку
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)