Как вы настраиваете подключение списка прокси в YoutubeDL (yt_dlp) для массового использования?

У меня возникли проблемы с YouTube, который постоянно требует подключить куки. Я пытался настроить автоматическую генерацию куков и добавил пакет playwright в yt_dlp, но ошибка продолжает появляться. Вот сообщение об ошибке:  
```
ERROR: [youtube] rI01giC57s0: Sign in to confirm you’re not a bot. Use --cookies-from-browser or --cookies for the authentication. See https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp for how to manually pass cookies. Also see https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies for tips on effectively exporting YouTube cookies
```

Я решил попробовать использовать прокси, но не один, а целый список, чтобы подключаться к YouTube с разных IP-адресов, что позволит прокси дольше работать. 

Я составил список из 10 прокси. При запуске бота сначала происходит проверка всех прокси из списка, чтобы определить, какие из них рабочие. Рабочие сохраняются в файл, который затем используется для запуска бота и парсинга YouTube.
  • 25 января 2025 г. 17:24
Ответы на вопрос 2
Для подключения списка прокси в `yt_dlp` и управления ими во время парсинга YouTube, вы можете использовать несколько методов. Вот пошаговый алгоритм, который поможет вам реализовать вашу задачу с использованием прокси:

### 1. Подготовка списка прокси

Сохраните ваши прокси в текстовом файле, где каждый прокси будет записан в отдельной строке. Например, `proxies.txt`:

```
http://proxy1:port
http://proxy2:port
http://proxy3:port
...
```

### 2. Проверка работоспособности прокси

Напишите скрипт на Python, чтобы проверить работоспособность прокси из списка. Вы можете использовать библиотеку `requests`:

```python
import requests

def check_proxy(proxy):
    try:
        response = requests.get('https://www.youtube.com', proxies={'http': proxy, 'https': proxy}, timeout=5)
        return response.status_code == 200
    except requests.RequestException:
        return False

working_proxies = []
with open('proxies.txt') as f:
    for line in f:
        proxy = line.strip()
        if check_proxy(proxy):
            working_proxies.append(proxy)

# Сохраните рабочие прокси в файл
with open('working_proxies.txt', 'w') as f:
    for proxy in working_proxies:
        f.write(proxy + '\n')
```

### 3. Настройка `yt_dlp` для использования прокси

Теперь, когда у вас есть список рабочих прокси, вы можете использовать их с `yt_dlp`. Вот пример скрипта для скачивания видео с использованием прокси:

```python
import yt_dlp
import random

def download_video(video_url, proxy):
    ydl_opts = {
        'proxy': proxy,  # Устанавливаем текущий прокси
        'cookies': 'path/to/cookies.txt',  # Укажите путь к вашим кукам, если нужно
    }
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download([video_url])

with open('working_proxies.txt') as f:
    working_proxies = [line.strip() for line in f]

video_url = 'https://www.youtube.com/watch?v=rI01giC57s0'  # Ваш URL видео

# Скачиваем видео с использованием случайного прокси из списка
if working_proxies:
    selected_proxy = random.choice(working_proxies)
    download_video(video_url, selected_proxy)
else:
    print("Нет рабочих прокси.")
```

### 4. Обработка ошибок и переключение прокси

Добавьте обработку ошибок для смены прокси, если выбранный прокси не работает. Например:

```python
for _ in range(5):  # Попробуем 5 раз
    selected_proxy = random.choice(working_proxies)
    try:
        download_video(video_url, selected_proxy)
        break  # Если успешно, выходим из цикла
    except Exception as e:
        print(f"Ошибка с прокси {selected_proxy}: {e}")
else:
    print("Не удалось скачать видео с доступными прокси.")
```

### Заключение

Этот подход позволяет вам эффективно использовать список прокси для скачивания видео с YouTube, сохраняя работоспособные прокси и переключаясь между ними при возникновении ошибок. Также не забывайте регулярно проверять вашу проксилист и обновлять его, чтобы избежать блокировок от YouTube.
yt_dlp не поддерживает список прокси, тебе нужно передавать по одному. 

Для каждого запроса только один прокси.

Вроде того(зависит от того, что ты хочешь сделать) + проверки желательно всегда.

# Считываем список рабочих прокси из файла
with open("/home/shortsvideo/working_proxies.txt", "r") as f:
    working_proxies = f.read().splitlines()

# Функция для проверки доступности прокси
def get_random_proxy(proxies):
    return random.choice(proxies)

# Настройки yt_dlp
ydl_opts = {
    'http_user_agent': 'your_user_agent',
    'cookiefile': '/path/to/cookies.txt',
    'format': 'mp4',
    'outtmpl': '/path/to/downloads/%(id)s.mp4',
    'force_ipv6': True,
    'age_limit': 45,
}

urls = ['https://example.com/video1', 'https://example.com/video2']  # Список видео для скачивания

for url in urls:
    proxy = get_random_proxy(working_proxies)  # Случайно выбираем прокси
    ydl_opts['proxy'] = proxy  # Указываем прокси для текущего запроса
    try:
        with YoutubeDL(ydl_opts) as ydl:
            ydl.download([url])  # Скачиваем видео
        print(f"Видео скачано успешно через прокси: {proxy}")
    except Exception as e:
        print(f"Ошибка при скачивании через прокси {proxy}: {e}")
        # Здесь можно исключить нерабочий прокси из списка


UPD: ещё надо проверять, что список не пуст, если удаляешь из списка нерабочие; что куки вообще есть,
Похожие вопросы