Як використовувати проксі у Scrapy
Scrapy пускає запити через проксі трьома способами: ключ meta на запит, змінна оточення або ротаційний downloader middleware. Розбираємо кожен, із робочим кодом для проксі s4m з автентифікацією.
Три способи, якими Scrapy говорить із проксі
Scrapy постачається з HttpProxyMiddleware, увімкненим за замовчуванням. Він бере проксі з одного з двох місць: ключа proxy у словнику meta запиту або стандартних змінних середовища http_proxy / https_proxy. Якщо потрібен один фіксований проксі на весь обхід, найшвидший шлях — змінна середовища; якщо ж потрібне керування й ротація на рівні запиту, виставляйте request.meta["proxy"] самі, зазвичай із власного downloader-мідлварю.
Автентифікація — саме те, що зазвичай пропускають. Scrapy не витягує USER:PASS@ з URL проксі так, як це робить curl, — він чекає на заголовок Proxy-Authorization. Чистий підхід — зібрати цей заголовок один раз і додавати його у своєму мідлварі. Проксі s4m автентифікуються парою USER:PASS на proxy.s4m.online, HTTP — на порту 3128 (природний варіант для HTTP-мідлварю Scrapy). Для SOCKS5 довелося б поставити перед обходом локальний міст SOCKS-у-HTTP, але для більшості скрапінгу простіше взяти HTTP-ендпоінт. Докладніше — на сторінці проксі, а також в інших посібниках зі скрапінгу.
Мідлварь з ротацією проксі
Покладіть це в middlewares.py, увімкніть у settings.py — і кожен запит братиме проксі з вашого пулу разом із правильним заголовком автентифікації.
# middlewares.py
import base64
import random
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
PROXIES = [f"http://{HOST}:3128"] # add more endpoints/ports to rotate
class S4mProxyMiddleware:
def _auth_header(self):
raw = f"{USER}:{PASS}".encode()
return b"Basic " + base64.b64encode(raw)
def process_request(self, request, spider):
request.meta["proxy"] = random.choice(PROXIES)
# Scrapy needs the Proxy-Authorization header explicitly:
request.headers[b"Proxy-Authorization"] = self._auth_header()
# settings.py
DOWNLOADER_MIDDLEWARES = {
# keep Scrapy's built-in proxy middleware after ours
"myproject.middlewares.S4mProxyMiddleware": 350,
"scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}
CONCURRENT_REQUESTS = 8
DOWNLOAD_DELAY = 0.5
RETRY_ENABLED = True
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]Складаємо все докупи
Від чистого проєкту до обходу крізь проксі.
Додайте мідлварь
Вставте клас S4mProxyMiddleware у middlewares.py свого проєкту й замініть USER, PASS і HOST на свої облікові дані та ендпоінт s4m.
Увімкніть його в налаштуваннях
Зареєструйте його в DOWNLOADER_MIDDLEWARES з пріоритетом нижче за HttpProxyMiddleware від Scrapy (менше число спрацьовує раніше), щоб ваш проксі й заголовок були виставлені до запуску вбудованого мідлварю.
Налаштуйте ввічливість
Виставте DOWNLOAD_DELAY і CONCURRENT_REQUESTS так, щоб не впиратися в ліміт швидкості цілі, та увімкніть RETRY_HTTP_CODES для 429 і 5xx — тоді тимчасові блокування повторюватимуться автоматично.
Перевірте вихідний IP
Додайте перший запит до сервісу, що повертає IP, наприклад https://api.ipify.org, і залогуйте відповідь — так ви переконаєтеся, що обхід справді виходить крізь проксі.
Ротація, повтори і чесність
Для справжньої ротації покладіть кілька ендпоінтів у PROXIES і нехай process_request обирає по одному на запит; поєднайте це з вбудованим мідлварем повторів Scrapy, щоб 429 чи 503 повторювалися вже з новим вибором. Тримайте DOWNLOAD_DELAY ненульовим, а паралельність — помірною: краулер, який відступає, заблокувати значно важче, ніж того, що біжить спринт.
Два чесні застереження. Перше: проксі s4m — серверні, а не резидентські: чудові для API, тестування й помірно захищених сайтів, але агресивні антибот-системи можуть позначати серверні діапазони. Друге: ротація не є дозволом ігнорувати правила сайту — читайте robots.txt і умови використання. Коли потрібен один сталий вихід для білого списку, візьміть краще виділену персональну IP, ніж ротацію. Перевіряйте виходи й порти в інструментах, а прототипуйте на безкоштовному списку проксі, перш ніж пускати справжній трафік.
Відповіді на питання
Чому Scrapy не бере USER:PASS з URL проксі?
На відміну від curl, HttpProxyMiddleware у Scrapy не розбирає облікові дані з URL. Заголовок Proxy-Authorization треба виставити самому — зібрати Basic-заголовок з USER:PASS, як показано у прикладі мідлварю.
Чи може Scrapy працювати з проксі SOCKS5?
Не напряму через HttpProxyMiddleware — він орієнтований на HTTP. Для Scrapy використовуйте HTTP-ендпоінт на порту 3128 або підніміть локальний міст SOCKS-у-HTTP, якщо SOCKS5 потрібен принципово.
Як ротувати проксі на кожен запит?
Складіть кілька ендпоінтів проксі у список і обирайте один у process_request, щоразу виставляючи request.meta["proxy"]. Поєднайте це з мідлварем повторів Scrapy, щоб заблокований запит повторювався вже з новим вибором.
Це резидентні проксі?
Ні. Проксі s4m — це серверні SOCKS5 і HTTP з автентифікацією та оплатою за фактом використання. Вони підходять для більшості завдань скрапінгу, хоча добре захищені цілі можуть позначати серверні діапазони IP.
Масштабуйте свої обходи на Scrapy
Серверні проксі з автентифікацією на proxy.s4m.online, оплата за фактом використання, готові до ротації в мідлварі Scrapy. Додайте виділену IP, коли ціль очікує один сталий вихід.
Цю сторінку знаходять за запитами
- як використовувати проксі у Scrapy
- як сконфігурувати vpn kill switch
- vpn kill switch для android
- vpn kill switch
- ip адреса для android
- налаштування проксі
- як перевірити, чи анонімне проксі
- найкращі VPN-протоколи у 2026 році
- список безкоштовних проксі
- socks5 проксі пояснення
- проксі для парсингу для початківців
- як виправити 429 too many requests під час скрапінгу
- авторизація проксі
- як уникнути банів IP під час скрапінгу
- socks5 проксі
Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.