Skip to content
Intermediate / 2 min read

Как использовать резидентные прокси ProxyScrape с Scrapy на Python

Интегрируйте резидентные прокси ProxyScrape в свои пауки Scrapy для надежного веб-скрапинга на Python. Включает промежуточное ПО для ротации, аутентификацию и настройку SOCKS5.

SOCKS5 HTTP(S) Веб-скрейпинг

Обзор

Scrapy — это мощный фреймворк Python для веб-скрапинга, но многие сайты блокируют запросы с одного IP. Использование прокси от ProxyScrape помогает распределять запросы, избегать ограничений скорости и получать доступ к геозависимому контенту. ProxyScrape предлагает резидентные, датацентровые и мобильные прокси с поддержкой HTTP и SOCKS5, оплатой по мере использования или фиксированной ежемесячной оплатой, а также пул из более чем 97 миллионов IP-адресов, созданный для долгосрочной бесперебойной работы.

Это руководство показывает, как интегрировать прокси ProxyScrape в проект Scrapy. Вы научитесь настраивать аутентификацию, ротировать прокси для каждого запроса и обрабатывать распространенные ошибки. Подход работает в Windows, macOS и Linux.

Предварительные требования

  • Установленный Python 3.8 или новее.
  • Установленный Scrapy (pip install scrapy).
  • Аккаунт ProxyScrape с резидентными или датацентровыми прокси. Вы можете зарегистрироваться на план или использовать оплату по мере использования.
  • Ваши учетные данные прокси: хост, порт, имя пользователя и пароль из панели управления ProxyScrape.

Понимание аутентификации прокси в Scrapy

ProxyScrape использует аутентификацию по имени пользователя и паролю. В Scrapy вы передаете URL прокси в мета-ключе запроса proxy. Формат:

  • HTTP/HTTPS: http://username:password@host:port
  • SOCKS5: socks5://username:password@host:port

Scrapy изначально поддерживает прокси HTTP и HTTPS. Для SOCKS5 вам нужен дополнительный пакет, например scrapy-socks.

Шаг 1: Установка Scrapy и создание проекта

Откройте терминал и выполните:

pip install scrapy
scrapy startproject proxyscrape_scrapy
cd proxyscrape_scrapy

Это создаст новый проект Scrapy с директорией пауков по умолчанию.

Шаг 2: Получите учетные данные прокси от ProxyScrape

Войдите в свою панель управления ProxyScrape и создайте список прокси. Вы получите хост, порт, имя пользователя и пароль. Для резидентных прокси вы можете получить хост шлюза, который автоматически ротируется, или список конечных точек. Для датацентровых прокси вы обычно получаете фиксированный IP и порт.

Пример учетных данных:

  • Хост: proxy.proxyscrape.com
  • Порт: 8080
  • Имя пользователя: user123
  • Пароль: pass456

Ваш URL прокси становится: http://user123:[email protected]:8080

Если ваш пароль содержит специальные символы, закодируйте их в URL (например, @ становится %40).

Шаг 3: Настройка базового прокси в пауке

Создайте простого паука, который проверяет ваш IP-адрес через прокси. В proxyscrape_scrapy/spiders/example.py:

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    start_urls = ['https://httpbin.org/ip']

    def start_requests(self):
        proxy = 'http://user123:[email protected]:8080'
        for url in self.start_urls:
            yield scrapy.Request(
                url,
                meta={'proxy': proxy},
                callback=self.parse
            )

    def parse(self, response):
        yield {'ip': response.text}

Запустите паука:

scrapy crawl example -O output.json

Вывод показывает IP-адрес, который видит целевой сайт. Если он совпадает с IP вашего прокси, настройка работает.

Шаг 4: Реализация промежуточного ПО для ротации прокси

Ротация прокси для каждого запроса повышает анонимность и снижает вероятность блокировок. Создайте промежуточное ПО в proxyscrape_scrapy/middlewares.py:

import random
from scrapy import signals

class ProxyRotationMiddleware:
    def __init__(self, proxies):
        self.proxies = proxies

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings.getlist('PROXY_LIST'))

    def process_request(self, request, spider):
        proxy = random.choice(self.proxies)
        request.meta['proxy'] = proxy
        spider.logger.debug(f'Using proxy: {proxy}')

Включите промежуточное ПО и определите список прокси в settings.py:

DOWNLOADER_MIDDLEWARES = {
    'proxyscrape_scrapy.middlewares.ProxyRotationMiddleware': 543,
}

PROXY_LIST = [
    'http://user1:pass1@host1:port1',
    'http://user2:pass2@host2:port2',
    'http://user3:pass3@host3:port3',
]

Теперь каждый запрос использует случайный прокси из списка. Вы можете заполнить список несколькими конечными точками ProxyScrape или использовать их ротирующий шлюз (одна конечная точка, которая автоматически ротируется).

Шаг 5: Обработка прокси SOCKS5 (опционально)

Scrapy не поддерживает SOCKS5 изначально. Установите scrapy-socks:

pip install scrapy-socks

Добавьте промежуточное ПО SOCKS5 в settings.py:

DOWNLOADER_MIDDLEWARES = {
    'scrapy_socks.Socks5DownloaderMiddleware': 543,
}

Затем установите прокси в мета-данных запроса как socks5://user:pass@host:port. Обратите внимание, что вы не можете использовать одновременно промежуточное ПО для ротации и scrapy-socks без пользовательской логики. Для большинства случаев использования HTTP-прокси проще и достаточно.

Шаг 6: Тестирование и проверка ротации

Запустите вашего паука и проверьте вывод:

scrapy crawl example -O output.json

Проверьте output.json. Если вы видите разные IP-адреса в разных запросах, ротация работает. Вы также можете добавить задержку между запросами, чтобы быть вежливым:

DOWNLOAD_DELAY = 2

Устранение неполадок

  • 407 Proxy Authentication Required: Проверьте имя пользователя и пароль. Убедитесь, что они закодированы в URL. Убедитесь, что ваш план ProxyScrape активен.
  • Connection refused or timeout: Подтвердите хост и порт. Проверьте ваш брандмауэр или VPN. Попробуйте другую конечную точку прокси.
  • Frequent blocks: Переключитесь на резидентные прокси, увеличьте DOWNLOAD_DELAY и включите ротацию. Датацентровые прокси чаще блокируются на строгих сайтах.
  • SOCKS5 errors: Убедитесь, что scrapy-socks установлен и настроен. Если вы получаете ошибки импорта, переустановите пакет.
  • SSL errors: Добавьте DOWNLOAD_HANDLERS или используйте https в URL прокси, если целевой сайт этого требует.

Выбор правильного типа прокси для Scrapy

Тип прокси Лучше всего подходит для Примечания
Резидентные Скрапинг сайтов с защитой от ботов Высокая анонимность, большой пул, медленнее
Датацентровые Высокоскоростной скрапинг менее защищенных сайтов Быстрее, дешевле, легче блокируются
Мобильные Скрапинг мобильного контента или приложений Редко блокируются, выше стоимость

ProxyScrape предоставляет все три типа с гибкой оплатой. Начните с резидентных для большинства задач скрапинга.

Резюме

Вы научились интегрировать прокси ProxyScrape в Scrapy: установить Scrapy, получить учетные данные, настроить базовый прокси, создать промежуточное ПО для ротации и, при необходимости, использовать SOCKS5. Протестируйте свою настройку и отрегулируйте ротацию и задержки, чтобы избежать блокировок. Надежные резидентные и датацентровые прокси ProxyScrape с более чем 97 миллионами IP-адресов и долгосрочной бесперебойной работой делают их отличным выбором для проектов скрапинга на Python.