перейти к содержанию

Как чередовать прокси для успешного парсинга веб-страниц

Как опытный эксперт по парсингу веб-страниц, я снова и снова сталкивался с проблемами блокировки прокси-серверов. Я не могу не подчеркнуть, насколько важна правильная ротация прокси для успешного крупномасштабного парсинга веб-страниц.

В этом подробном руководстве, состоящем из более чем 3000 слов, мы подробно рассмотрим оптимальные стратегии ротации прокси, позволяющие избежать блокировок и эффективного парсинга.

Почему ротация прокси важна для парсинга веб-страниц

Давайте кратко повторим, почему прокси необходимы для парсинга веб-страниц.

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

Чтобы идентифицировать и заблокировать скраперы, большинство веб-сайтов используют такие средства защиты, как:

  • Ограничение скорости IP – Ограничивает количество запросов, которые IP может сделать за определенный период времени.
  • Капчи – Представляет собой задачу подтвердить, что вы человек.
  • IP-блоки – Блокирует ваш IP-адрес, если он обнаружен как парсер

Теперь, если вы не используете прокси, весь ваш парсерный трафик исходит с одного IP-адреса жилого дома или центра обработки данных.

Пройдет немного времени, прежде чем ваш IP-адрес достигнет предела скорости или будет полностью заблокирован.

Исходя из моего опыта, вот что происходит при парсинге с одного IP:

  • После 50-100 запросов, вы, скорее всего, достигнете предела скорости и вам придется снизить скорость до 1 запроса каждые 10+ секунд. Это существенно снижает скорость очистки.

  • После 200-500 запросов, существует высокая вероятность срабатывания капчи, подтверждающей, что вы не бот. Решение капч вручную снижает скорость парсинга.

  • После 500-1,000 запросов, скорее всего, ваш IP-адрес будет полностью заблокирован. Игра закончена.

Как видите, парсинг сколько-нибудь значимого количества страниц без прокси невозможен.

Вот тут-то и приходит на помощь ротация прокси.

Ротация прокси означает распределение запросов вашего парсера. по нескольким IP-адресам с использованием прокси-серверов. Это позволяет вам:

  • Избегайте того, чтобы весь трафик исходил с одного IP-адреса, который может быть легко помечен для очистки.

  • Увеличивайте количество запросов, не выходя за пределы ограничений целевого сайта.

  • Продолжайте парсинг, даже если некоторые прокси заблокированы, быстро отключив их.

Позвольте мне поделиться реальным примером, который доказывает, почему ротация прокси имеет решающее значение.

Недавно меня наняли для сбора 50,000 XNUMX списков товаров с сайта электронной коммерции. Без прокси получилось вот что:

  • Около 500 запросов я начал нажимать на капчи и задержки между запросами по 5 секунд. Царапание замедлилось до ползания.

  • При 2000 запросах мой IP был полностью заблокирован сайтом. Расчистка остановлена.

Теперь я переключился на ротацию всего 5 резидентных прокси, вот результаты:

  • Каждый прокси-сервер сделал около 500 запросов, прежде чем ему пришлось замедлиться, чтобы избежать капч.

  • Ни один прокси-сервер не был заблокирован, так как я продолжал переходить на новый IP-адрес.

  • Я успешно очистил все 50,000 XNUMX объявлений, распределив нагрузку между прокси.

Этот реальный пример ясно показывает, как ротация прокси может означать разницу между получением нескольких сотен страниц и десятков тысяч.

По моему опыту, ротация прокси обязательный для любой серьезной операции по очистке веб-страниц.

Далее давайте рассмотрим некоторые умные стратегии ротации прокси, которые вам следует использовать.

Стратегии ротации прокси

Существует несколько проверенных схем ротации прокси, которые могут оптимизировать производительность парсинга. Некоторые популярные подходы включают в себя:

соревнования по круговой системе

Этот метод последовательно перебирает список IP-адресов прокси.

Например с 3 прокси:

Request 1 -> Proxy 1 
Request 2 -> Proxy 2
Request 3 -> Proxy 3
Request 4 -> Proxy 1
Request 5 -> Proxy 2

Круговая ротация гарантирует, что мы распределяем запросы довольно равномерно по всем прокси. Это предотвращает повторное использование одного и того же прокси.

Основным недостатком является то, что если один прокси будет заблокирован, он будет продолжать выбираться в каждой ротации.

Судя по моим тестам, циклический перебор прилично работает с пулом среднего размера из 5-10 работоспособных прокси.

Случайный прокси

Эта стратегия выбирает совершенно случайный прокси из пула для каждого запроса.

Request 1 -> Proxy 3
Request 2 -> Proxy 2
Request 3 -> Proxy 5
Request 4 -> Proxy 1
Request 5 -> Proxy 8 

Случайный выбор прокси обеспечивает полную непредсказуемость использования прокси. Сайтам сложно обнаружить какие-либо закономерности со случайным вращением.

Риск заключается в том, что рандомизация может иногда привести к тому, что один и тот же прокси будет случайно выбран неоднократно. Чтобы предотвратить это, необходимы умелые алгоритмы рандомизации.

Я обнаружил, что случайная ротация прокси лучше всего работает с большими пулами, состоящими из 15-25+ прокси.

На основе производительности

Более продвинутые методы отслеживают частоту успешных/неудачных прокси и соответственно выбирают прокси.

Например, прокси, которые сталкиваются с капчами или блокировками, используются меньше, в то время как высокопроизводительные прокси используются больше.

Это требует некоторой логики для обнаружения сбоев прокси и ведения статистики по каждому прокси. Но это гарантирует, что мы максимально используем «здоровые» прокси.

По моему опыту, ротация на основе производительности дает наилучшие результаты, но для ее реализации требуется больше усилий по кодированию.

Согласованность IP

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

Например, если во время одного пользовательского сеанса сайт видит запросы с разных IP-адресов, это красный флаг для парсинга.

Ротация согласованности IP-адресов гарантирует, что каждый прокси-сервер обрабатывает весь трафик для отдельного сеанса пользователя. Таким образом, целевой сайт видит одинаковые IP-адреса для каждого пользователя.

Этот метод полезен при парсинге сайтов с тщательно отслеживаемыми пользовательскими сеансами, таких как социальные сети и электронная коммерция.

Совет эксперта

«Распространенная ошибка — слишком быстрая смена прокси. Переключение IP-адресов при каждом запросе часто является излишним. Обычно я меняю постепенно после каждых 50-100 запросов на прокси. Это позволяет избежать шаблонов следа, которые могут выглядеть подозрительно».

Независимо от того, какую стратегию ротации вы используете, важно вращайте постепенно и не слишком агрессивно. Сайты могут обнаруживать сверхчастое переключение IP-адресов как следы очистки.

Теперь давайте рассмотрим несколько ключевых советов по оптимизации ротации прокси…

Лучшие практики для ротации прокси

Методом проб и ошибок я выявил некоторые лучшие практики ротации прокси:

Ротация по подсети прокси

Многие прокси-серверы принадлежат одним и тем же диапазонам подсетей крупных провайдеров, таких как Luminati или Smartproxy.

Случайное чередование может привести к тому, что прокси-серверы будут появляться последовательно, если они находятся в одной подсети.

Request 1 -> 123.45.67.89 (Subnet A)
Request 2 -> 123.45.67.93 (Subnet A again!) 

Повторяющиеся IP-адреса из одного и того же диапазона подсети — это надежная уловка для парсинга.

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

Используйте здоровое сочетание типов прокси

Не кладите все яйца в одну корзину. Используйте смесь:

  • Datacenter - Самые быстрые скорости. Риск засорения из-за интенсивного использования скребка.
  • Жилая – Медленнее, но выглядят более «человечными». Ограниченная доступность.
  • Мобильный телефон – Появляются как мобильные пользователи. Многие сайты не полностью поддерживают мобильные устройства.

Достижение правильного баланса типов прокси гарантирует, что вы будете защищены от проблем, если один пул прокси будет перегружен или заблокирован.

Отключить неработающие прокси

Даже при активной ротации некоторые прокси неизбежно начнут глючить с блоками и капчами.

Временно отключите прокси, возвращающие любые ошибки или блокировки. Это дает им возможность «остыть» и сбрасывает их статус на целевом сайте.

Вы можете периодически повторно проверять отключенные прокси, чтобы увидеть, восстановились ли они.

Добавить задержки

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

Мой типичный подход — добавлять случайные задержки на 1–3 секунды каждые 5–10 запросов.

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

Поворот стран

Если вы ориентируетесь на сайты конкретной страны, обязательно используйте прокси, фактически расположенные в этой стране.

Например, при парсинге сайта, ориентированного на пользователей из Великобритании, я обязательно чередую прокси для жилых помещений и центров обработки данных, расположенных в Великобритании.

Ротация на основе географии помогает сливаться с местным пользователем, делающим запросы.

Совет эксперта

«Один умный трюк, который я рекомендую, — это слегка менять пользовательский агент при каждой ротации прокси. Это добавляет еще одну переменную, которая не позволяет целевому сайту легко профилировать и обнаруживать ваш парсер».

Проявите творческий подход, добавив небольшие настройки, такие как ротация пользовательского агента, чтобы еще больше замаскировать отпечатки пальцев вашего парсера.

Реализация ротации прокси в Python

Теперь, когда мы изучили стратегии ротации прокси, давайте рассмотрим пример реализации Python.

Сначала мы определим список доступных прокси:

proxies = [
  ‘104.45.147.53:8080‘,
  ‘45.15.62.230:8123‘, 
  ‘177.36.45.82:3128‘,
  # etc
]

Далее нам нужна логика для фактического перемещения по этому списку. Мы будем использовать Python random библиотека для выбора случайного прокси для каждого запроса:

import random

def get_random_proxy():
  return random.choice(proxies)

Чтобы не выбирать один и тот же прокси дважды, мы можем отслеживать ранее использованный прокси и повторно рандомизировать его, пока не получим новый:

last_proxy = None

def get_random_proxy():

  proxy = random.choice(proxies)  

  while proxy == last_proxy:
    proxy = random.choice(proxies)

  last_proxy = proxy

  return proxy 

Теперь мы можем передать повернутый прокси в requests модуль:

import requests

# Rotate proxy
proxy = get_random_proxy() 

# Make request with rotated proxy  
requests.get(‘http://example.com‘, proxies={‘http‘: proxy, ‘https‘: proxy})

Это дает нам базовую настройку ротации прокси всего за несколько строк!

Далее давайте рассмотрим более продвинутый ротатор прокси, который включает в себя некоторые лучшие практики…

import random
from time import sleep

# Proxy list
proxies = [
  {‘ip‘: ‘104.45.147.53:8080‘, ‘country‘: ‘US‘, ‘subnet‘: ‘147‘},
  {‘ip‘: ‘45.15.62.230:8123‘, ‘country‘: ‘CA‘, ‘subnet‘: ‘62‘},
  # etc
]

# Tracking variables
last_proxy = None
last_subnet = None
disabled_proxies = [] 

def get_proxy():

  # Remove disabled proxies
  global proxies 
  proxies = [p for p in proxies if p[‘ip‘] not in disabled_proxies]

  # Weight random selection 
  proxy_weights = []
  for proxy in proxies:
    if proxy[‘country‘] == ‘US‘:
      # Prefer US proxies
      weight = 100 
    else:
      # Lower weight for non-US
      weight = 50

    if proxy[‘subnet‘] == last_subnet:
      # Lower weight if same subnet
      weight -= 20

    # Apply weight    
    proxy_weights.extend([proxy]*weight)

  # Pick weighted random proxy
  proxy = random.choice(proxy_weights) 

  # Avoid immediate subnet repeat
  while proxy[‘subnet‘] == last_subnet:
    proxy = random.choice(proxy_weights)

  # Rotate subnet 
  last_subnet = proxy[‘subnet‘]

  # Optional delay
  sleep(1)

  return proxy[‘ip‘]

# Usage:

proxy = get_proxy()
try:
  response = requests.get(‘http://example.com‘, proxies={‘http‘: proxy, ‘https‘: proxy})
  # Success - do nothing
except:
  # Failure - disable proxy
  disabled_proxies.append(proxy) 

Это дает нам более надежный ротатор с:

  • Взвешивание прокси
  • Удаление неудачных прокси
  • Ротация подсетей
  • Задержка между запросами

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

Использование API-интерфейсов прокси для ротации

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

Некоторые известные прокси-API, на которые стоит обратить внимание:

Luminati – Крупнейшая сеть платных прокси с более чем 72 миллионами IP-адресов. Идеально подходит для очень больших операций очистки. Минимальная стоимость около 500 долларов в месяц.

Оксилабс – Предлагает 3 миллиона прокси для жилых помещений, центров обработки данных и мобильных устройств. Цены начинаются от 300 долларов США в месяц за 1 миллион запросов.

Смартпрокси – Специализируется на резидентных прокси-серверах с обратным подключением и 40 миллионами IP-адресов. Планы начинаются с 75 долларов США в месяц за 5 ГБ трафика.

Геосерфинг – Отлично подходит для нишевого таргетинга с прокси в более чем 50 странах. Планы проживания начинаются от 290 долларов в месяц.

Микролистья – Бюджет API для резидентных прокси начинается от 85 долларов США в месяц за 1 миллион запросов.

ScrapeOps – Интеллектуальный прокси-API со встроенной ротацией и решением CAPTCHA. Планы начинаются с 299 долларов США в месяц за 1 миллион запросов.

Основное преимущество API — упрощенная интеграция и мгновенное получение прокси без длительной настройки. Большинство из них оптимизируют использование прокси-сервера «под капотом».

Например, вот скрипт, использующий прокси-API ScrapeOps для очистки сайта:

import scrapeops

api = scrapeops.API()

for page in range(1, 100):
   url = f‘http://site.com/page/{page}‘
   html = api.get_html(url)
   # Parse html

API абстрагирует все управление прокси-серверами и обеспечивает чистый HTML с любой страницы.

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

Заключение

Прокси-серверы обязательны для любой серьезной операции по парсингу веб-страниц. Проще говоря – никаких прокси, никакого парсинга.

Обязательно используйте несколько прокси и реализуйте надежную стратегию ротации, такую ​​​​как циклический, взвешенный по производительности или случайный.

Следуйте лучшим практикам, таким как ротация подсетей, отключение неисправных прокси-серверов, добавление задержек и смешивание типов прокси-серверов.

Тщательная и продуманная ротация прокси-серверов позволит вам выполнять масштабный парсинг, не беспокоясь о блокировках IP-адресов или капчах.

Я надеюсь, что это руководство предоставит исчерпывающий обзор оптимальных методов ротации прокси в ваших проектах парсинга веб-страниц. Дайте мне знать, если у вас есть еще какие-либо советы по ротации прокси!

Теги:

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *