Если запрос не сильно сложный, то можно так:
F12 в браузере -> network
Нажимаем кнопку на сайте, смотрим на первый запрос в списке и что он вернул. Если вернул html, из него можно распарить ссылку новую. Если редирект, то нужно брать новую ссылку из хедера Location.
Если запрос сложный, допустим нужна авторизация, или там через js сложно сделано, то можно использовать Selenium. Там все просто. Чтобы браузер не мозолил глаза, можно задать настройку headless.
Это в общих чертах. Если никто не сделает до завтра, то могу помочь утром.
UPD:
import requests
import time
import json
import re
BASE_URL = 'https://rezka.ag/ajax/get_cdn_series/?t={}'
def parse_quality(urls, quality=None):
splited = urls.split(',')
if not quality:
using_quality = splited[-1].split('http')[0]
print('Используем максимально доступное качество ({})'.format(using_quality))
return splited[-1].split(' or')[0].replace(using_quality, '')
intext_quality = '[{}p]'.format(quality)
if intext_quality not in urls:
print('Качества {} нет в списке доступных'.format(quality))
# тут уже я не выдержал и импортировал регекс
available_qualities = re.findall(r'\[(.+?)\]', urls)
print('Доступные варианты: ', ', '.join(available_qualities))
return None
for url in splited:
if intext_quality in url:
return url.split(' or')[0].replace(intext_quality, '')
def get_urls(film_id, season, episode):
payload = {'id': film_id, 'translator_id': '1', 'season': season, 'episode': episode, 'action': 'get_stream'}
r = requests.post(BASE_URL.format(str(int(time.time()))), data=payload)
if r.status_code != 200:
# тут нужно будет как нибудь обработать ошибку, если запрос не прошел
print('Ошибка')
return
data = json.loads(r.text)
if data.get('success') != True:
# тут нужно будет как нибудь обработать ошибку, если запрос не прошел
print('Ошибка')
print(data)
return
return data['url']
if __name__ == '__main__':
all_urls = get_urls(9364, 1, 1)
if all_urls:
url = parse_quality(all_urls)
print(url)
Параметры для get_urls:
ID фильма, можно взять по ссылке в браузере
Сезон, эпизод - тут все понятно
Параметры для parse_quality:
список ссылок с качеством
желаемое качество. Например, parse_quality(all_urls, 1080)
Если качество задано, то вернет ссылку на него, если не найдет - ошибка
Если качество не задано, то вернет максимальное доступное
ps:
если весь запустить код сверху, то он вернет 1080p, но в ссылке явно будет указано 720p. В этом ошибки нет, сайт так помечает 1080p, похоже, нет там 1080 честного)
Сырой ответ с ссылками, если интересно
[360p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/240.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/65af9f4fab0d894043fac8887b7da99e:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/240.mp4,[480p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/360.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/ea218fab2e907aa2093c5bc7f9cb480d:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/360.mp4,[720p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/480.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/92bdeccddc5661b6b786659fae6adc3b:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/480.mp4,[1080p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/720.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/d2bb808ccb6910d8317224825ee2875d:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/720.mp4