Написал код для скачивания видео с сайта, но вместо видео скачиваются файлы по 1 кб

Рейтинг: 0Ответов: 1Опубликовано: 04.08.2023
import requests  
from bs4 import BeautifulSoup  
from time import sleep

headers = {Скрою на всякий случай}

def download(url_v):  
    resp = requests.get(url_v, stream=True)  
    r = open('D:\\bleeeaaach\\' + url_v.replace('.html', '.mp4').split('/')[5].split('?')[0].split('.')[0], 'wb')  
    for value in resp.iter_content(1024*1024):  
       r.write(value)  
    r.close()

def get_url():  
    sleep(3)  
    url = 'https://jut.su/bleeach/'  
    response = requests.get(url, headers=headers)  
    soup = BeautifulSoup(response.text, 'lxml')  
    data = soup.find_all('a', class_='short-btn green video the_hildi')  

    for a in data:
        url_v = 'https://jut.su' + a.get('href')
        yield url_v

for url_v in get_url():  
    sleep(3)  
    response = requests.get(url_v, headers=headers)  
    soup = BeautifulSoup(response.text, 'lxml')  
    data = soup.find('source', label="1080p").get('src')  
    download(data)  
    #print(data)  

Картинку с кодом вроде прикрепил

Код работает без ошибок, но почему-то не скачивает видео, не могу понять почему. Я проверял без функции download, выводит ли он нужные мне ссылки, и код все делал и выводил правильно.

Ответы

▲ 0
import re
import requests  
from bs4 import BeautifulSoup


headers = {'user-agent': None}


def download_video(video_url: str):
    episode = re.search(r"bleach/(\d)\.1080", video_url).group(1)
    filename = f"{episode}.mp4"
    
    print(f"Скачиваю видео: {filename}")
    try:
        response = requests.get(video_url, headers=headers, stream=True)
        response.raise_for_status()
        
        with open(filename, "wb") as file:
            for chunk in response.iter_content(chunk_size=8192):
                file.write(chunk)
        
        print(f"Видео сохранено в файл {filename}")
    except requests.RequestException as ex:
        print(f"Не удалось скачать видео: {ex}")


def get_video_url(episode: int) -> str:
    print(f"Получаю ссылку видео: {episode}")
    
    url = f"https://jut.su/bleeach/season-1/episode-{episode}.html"
    # Если нужно скачивать по сезонам, то дополнительно добавляете аргумент "season"
    # В итоге ссылка будет: f"https://jut.su/bleeach/season-{season}/episode-{episode}.html"
    
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
    except requests.RequestException as ex:
        print(f"Не удалось получить ссылку на видео: {ex}")
        return
    
    soup = BeautifulSoup(response.text, 'lxml')
    video_url = soup.select_one("source[label='1080p']")
    return video_url.get("src") if video_url else None


def main() -> None:
    for episode in range(1, 2): # <- епизоды для скачивания
        video_url = get_video_url(episode)
        download_video(video_url)
    
    # Если нужно скачивать эпизоды по сезонам, то добавляете еще один цикл
    # for season in range(1, 2):
    #     for episode in range(1, 2):
    #         video_url = get_video_url(episode)
    #         download_video(video_url)
    

main()