TL;DR
Colly принимает стандартную функцию прокси через SetProxyFunc. Используйте его proxy.RoundRobinProxySwitcher для простой ротации конечных точек, устанавливайте консервативный параллелизм и задержки, и ведите учет результатов без учетных данных. Сохраняйте одну липкую конечную точку для состояния сеансов; вращайте только независимые, авторизованные запросы.
Настройка прокси в Colly
Официальный пример переключателя прокси Colly использует RoundRobinProxySwitcher, который поддерживает URL-адреса прокси для HTTP, HTTPS и SOCKS5.
go get github.com/gocolly/colly/v2
package main import ( "fmt" "log" "github.com/gocolly/colly/v2" "github.com/gocolly/colly/v2/proxy" ) func main() { switcher, err := proxy.RoundRobinProxySwitcher( "http://USER:PASS@gate-1.example:8000", "http://USER:PASS@gate-2.example:8000", ) if err != nil { log.Fatal(err) } c := colly.NewCollector( colly.AllowedDomains("example.com"), colly.Async(true), ) c.SetProxyFunc(switcher) c.OnResponse(func(r *colly.Response) { fmt.Printf("status=%d bytes=%d url=%s\n", r.StatusCode, len(r.Body), r.Request.URL) }) c.OnError(func(r *colly.Response, err error) { fmt.Printf("status=%d error=%v url=%s\n", r.StatusCode, err, r.Request.URL) }) c.Visit("https://example.com/authorized-page") c.Wait() }
Замените примерные шлюзы на ваши авторизованные жилые прокси Nstdata. Храните учетные данные вне исходного файла.
Модель мышления: Colly управляет поведением сканирования; прокси меняет сетевой источник. Ни одно из них не заменяет авторизацию или контроль за скоростью.
Добавьте ограниченный параллелизм и задержку
Применяйте ограничения перед увеличением пропускной способности:
err := c.Limit(&colly.LimitRule{ DomainGlob: "*example.com*", Parallelism: 4, Delay: 750 * time.Millisecond, RandomDelay: 500 * time.Millisecond, }) if err != nil { log.Fatal(err) }
Импортируйте time для этого фрагмента. Устанавливайте значения из разрешенного бюджета запросов сайта, а не из максимума, который ваша машина может отправить.
Выберите ротацию или липкие сессии
Ротация по кругу подходит для независимых общественных страниц, когда требуется распределение по местоположению. Потоки входа, корзины и многошаговая навигация часто требуют одной и той же конечной точки и кук. Для них выделите коллектор или конечную точку прокси для сеанса, а не вращайте посреди его.
Если ответ возвращает 429, уважайте Retry-After и уменьшите трафик. Рассматривайте 401, 403 или страницы вызова как повод для проверки разрешения и интеграции — а не как побуждение к усилению тактики обхода.
Проверочный список для продакшена
- Включите целевые домены и шаблоны URL в белый список.
- Настройте тайм-ауты подключения и ответа.
- Ограничьте размер очереди, глубину, страницы, повторные попытки и байты ответа.
- Записывайте метку прокси, статус, задержку, счетчик повторных попыток и результат парсера.
- Удаляйте имена пользователей и пароли из логов.
- Удаляйте дубликаты канонических URL перед посещениями.
- Остановитесь автоматически, когда уровень ошибок или уровень блокировки превыше порога.
Окончательный вердикт
Для интеграции прокси в Colly начните с RoundRobinProxySwitcher, затем добавьте ограничения по доменам, темп, тайм-ауты и наблюдаемую обработку сбоев. Используйте Nstdata, когда ваша авторизованная нагрузка требует жилой маршрутизации или централизованного управления прокси; используйте Nstdata Crawl, когда чистый вывод страницы более важен, чем контроль каждого запроса.
Испытайте Nstdata — начните свой бесплатный пробный период сегодня
Часто задаваемые вопросы
Colly автоматически меняет прокси?
Нет, пока вы не предоставите функцию прокси. Поставляемый пакет прокси предлагает переключатель по кругу.
Может ли Colly использовать SOCKS5?
Да. Официальная документация переключателя перечисляет URL-адреса прокси SOCKS5.
Почему ротация ломает сканирование?
Сайты с состоянием могут связывать куки или сеансы с одной сетевой идентичностью. Используйте липкую конечную точку для полного потока.




