Перейти к основному содержимому

Как импортировать внешние списки прокси с помощью Python

В этой статье мы покажем вам, как преобразовать ваши внешние списки прокси в готовые для API JSON-файлы. Этот подход позволяет сохранять все ваши учетные данные в удобном формате JSON, что упрощает интеграцию с конечными точками API.

Перед началом

Убедитесь, что у вас настроена среда Python со следующими установленными пакетами:

  • json
  • re

Вам также потребуется сохранить приведенный ниже скрипт Python.

Скрипт json_proxy_list.py

Сохраните следующий скрипт Python под именем json_proxy_list.py в нужную вам папку. Этот скрипт запросит у вас источник списка прокси (либо путь к файлу, либо прямая вставка) и тип прокси, а затем сгенерирует файл proxies.json.

import json
import re

# Введите здесь путь к файлу списка прокси, если есть.
file_path = "C:/Users/.../input_list.txt"

# Вставьте список прокси здесь. Поддерживаемые разделители: запятая, вертикальная черта, пробел, новая строка
paste_list = """
host:port:username:password
"""

# Чтение прокси из файла, если указан путь
def read_proxies_from_file(file_path):
try:
with open(file_path, 'r') as file:
return file.read()
except Exception as e:
print("Ошибка чтения файла - пожалуйста, проверьте ПУТЬ к файлу.")
print(f'Обнаружено исключение: {e}')
return None # Вернуть None для обозначения неудачи

# Требуется ввод пользователя: тип прокси (HTTP/SOCKS5)
def get_proxy_type():
print("Введите тип прокси:")
print("(1) HTTP")
print("(2) HTTPS")
print("(3) SOCKS5")
choose_type = input()

if choose_type == "1":
proxy_type = "http"
elif choose_type == "2":
proxy_type = "https"
elif choose_type == "3":
proxy_type = "socks5"
else:
print("Неверный тип прокси. Введите действительный номер варианта.")
return get_proxy_type() # Рекурсивный вызов до получения корректного ввода

return proxy_type

# Обнаружение разделителя строк из блока учетных данных (Примечание: Эта функция определена, но не используется в текущей логике main())
def get_line_separator(proxy_list):
# Обнаружение наиболее распространенных разделителей строк
separators = ['\n', ',', '/', ' ']
separator_counts = {sep: proxy_list.count(sep) for sep in separators}
sorted_separators = sorted(separator_counts, key=separator_counts.get, reverse=True)
most_likely_separator = sorted_separators[0]

# Обработка двойных значений, таких как '\n,', путем проверки комбинаций распространенных разделителей
combined_separators = ['\n,', ',\n', '\n/', '/\n', '\n ', ' \n', ', ', ' ,', '/ ', ' /']
for combo in combined_separators:
if combo in proxy_list:
return combo

return most_likely_separator

# Основная функция - запрашивает у пользователя предпочтительный источник списка прокси
def main():
# Выбор источника списка прокси
print("Выберите источник списка:")
print("(1) из ТЕКСТА")
print("(2) из ПУТИ")
choice = input()

proxy_list_content = None
# Выполнение действий в зависимости от источника скрипта
if choice == '2':
proxy_list_content = read_proxies_from_file(file_path)
if proxy_list_content is None:
print("Не удалось прочитать прокси из файла. Выход.")
return
elif choice == '1':
proxy_list_content = paste_list
else:
print("Неверный выбор источника списка. Выход.")
return

# Проверка HTTP/SOCKS5
proxy_type = get_proxy_type()

# Разделение списка прокси на основе обнаруженного разделителя
# Использование re.split для надежной обработки нескольких разделителей (новая строка, запятая, пробел, слэш)
proxy_lines_raw = re.split(r'[\n, /]+', proxy_list_content.strip())

# Добавление типа прокси к каждой строке и фильтрация пустых строк
proxy_lines = [f"{proxy_type}:{line.strip()}" for line in proxy_lines_raw if line.strip()]

# Создание объекта JSON, аналогичного выводу API для легкой будущей интеграции
proxies_json = {
"proxies": {
"proxy": []
}
}

# Для каждой строки прокси, содержащейся в списке прокси, взять каждый элемент прокси для его назначения.
# Каждая строка теперь должна быть в формате: тип:хост:порт:имя_пользователя:пароль
for line in proxy_lines:
parts = line.split(':')
if len(parts) != 5: # тип, хост, порт, имя_пользователя, пароль
print(f"Пропуск неверной строки: '{line}'. Ожидалось 5 частей (тип:хост:порт:имя_пользователя:пароль), но получено {len(parts)}. Пожалуйста, проверьте формат ваших учетных данных прокси.")
continue
proxy = {
"type": parts[0],
"host": parts[1],
"port": parts[2],
"username": parts[3],
"password": parts[4]
}
proxies_json["proxies"]["proxy"].append(proxy)

if not proxies_json["proxies"]["proxy"]:
print("Не было обработано ни одной действительной записи прокси. Выходной файл будет пустым или не будет отражать ваш полный список.")

# Создание JSON.dumps, сохранение его в файле proxies.json.
try:
with open('proxies.json', 'w') as json_file:
json.dump(proxies_json, json_file, indent=2)
print("Файл proxies.json успешно записан.")
except IOError as e:
print(f"Ошибка записи в proxies.json: {e}")


if __name__ == "__main__":
main()

Запуск скрипта

  1. Перейдите в каталог скрипта: Откройте терминал или командную строку и перейдите в папку, где вы сохранили json_proxy_list.py.

  2. Запустите скрипт: Выполните скрипт с помощью следующей команды:

    python json_proxy_list.py
  3. Выберите источник списка прокси: Скрипт предложит вам выбрать источник вашего списка прокси:

    • Опция (1) из ТЕКСТА: Если вы выберете это, скрипт будет использовать данные прокси, вставленные непосредственно в переменную paste_list в скрипте (примерно строка 8).
      подсказка

      Измените переменную paste_list в скрипте перед запуском, если вы выберете эту опцию. Каждый прокси должен быть в формате хост:порт:имя_пользователя:пароль. Прокси могут быть разделены новыми строками, запятыми, пробелами или слэшами. Пример для paste_list:

      paste_list = """
      host1:port1:user1:pass1
      host2:port2:user2:pass2, host3:port3:user3:pass3
      """
    • Опция (2) из ПУТИ: Если вы выберете это, скрипт попытается прочитать прокси из файла, указанного в переменной file_path (примерно строка 5).
      к сведению

      Убедитесь, что переменная file_path в скрипте указывает на ваш фактический .txt файл, содержащий список прокси. Формат внутри файла должен быть один прокси на строку (или разделенный поддерживаемыми разделителями), например хост:порт:имя_пользователя:пароль. Пример для file_path:

      file_path = "C:/Users/YourUser/Documents/my_proxies.txt"
      warning

      Если скрипт столкнется с ошибкой при чтении файла (например, неверный путь), он выведет сообщение об ошибке и завершит работу. Дважды проверьте file_path.

  4. Выберите тип прокси: Далее вам будет предложено ввести тип прокси:

    • (1) HTTP
    • (2) HTTPS
    • (3) SOCKS5 Этот выбор имеет решающее значение, поскольку большинство внешних списков прокси не указывают тип. Скрипт добавит выбранный тип к каждой записи прокси в выходном JSON.
  5. Проверьте результаты: После завершения работы скрипт создаст файл с именем proxies.json в том же каталоге. Этот файл содержит ваш список прокси, отформатированный в JSON.

    Пример вывода proxies.json:

    {
    "proxies": {
    "proxy": [
    {
    "type": "http",
    "host": "host1",
    "port": "port1",
    "username": "user1",
    "password": "pass1"
    },
    {
    "type": "http",
    "host": "host2",
    "port": "port2",
    "username": "user2",
    "password": "pass2"
    }
    ]
    }
    }

Этот структурированный JSON-файл теперь готов для более легкой интеграции с конечными точками API или другими инструментами, которые используют списки прокси в этом формате.