ProxyHealthList

Главная / Сценарии / Scrapy

Бесплатные прокси для Scrapy

У Scrapy есть встроенная поддержка прокси через request.meta['proxy']. Совместите её с бесплатным списком, проверяемым каждый час, и небольшим middleware ротации.

Список HTTP (TXT) Полный список (JSON)

Middleware ротации прокси

Поместите этот middleware в проект и включите в settings.py. Он один раз загружает проверенный список, назначает случайный прокси на запрос и повторяет с другим при сбое прокси.

# middlewares.py
import random, requests

class VerifiedProxyMiddleware:
    LIST = "https://raw.githubusercontent.com/xyzs996/free-proxy-health-list/main/proxies/protocols/http/data.txt"

    def __init__(self):
        txt = requests.get(self.LIST, timeout=15).text
        self.proxies = [f"http://{l.strip()}" for l in txt.splitlines() if l.strip()]

    def process_request(self, request, spider):
        request.meta["proxy"] = random.choice(self.proxies)

    def process_exception(self, request, exception, spider):
        request.meta["proxy"] = random.choice(self.proxies)
        return request
# settings.py
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.VerifiedProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}
RETRY_ENABLED = True
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 15
DOWNLOAD_DELAY = 1.0

Советы

Бесплатные прокси нестабильны: держите RETRY_ENABLED и щедрый RETRY_TIMES. Начните с быстрого подмножества и перезагружайте список между долгими обходами. Всегда соблюдайте robots.txt.

Частые вопросы

Как задать прокси в Scrapy?

Задайте request.meta['proxy'] = 'http://host:port' или экспортируйте http_proxy.

Поддерживает ли Scrapy SOCKS5?

Стандартный middleware обрабатывает HTTP; для SOCKS нужен внешний handler.

Откуда берётся список?

Скачайте проверенный список в TXT или JSON с CDN; он перепроверяется каждый час.

Связанное