---
title: "Знакомство с Colly: зачем скрапить на Go"
description: "Что такое веб-скрапинг на Go и зачем нужен фреймворк colly golang: сравнение с net/http, goquery и chromedp, границы темы, таблица подходов и карта курса."
course: "Colly: парсинг и веб-скрапинг на Go"
url: "https://golangmaster.ru/courses/colly/lessons/01-znakomstvo-colly/"
published: "2026-09-19"
updated: "2026-09-21"
minutes: 16
---

# Знакомство с Colly: зачем скрапить на Go

*Курс «Colly: парсинг и веб-скрапинг на Go», урок 1 из 25. ~16 минут. Обновлено 21.09.2026. Источник: https://golangmaster.ru/courses/colly/lessons/01-znakomstvo-colly/*

Пятница, шесть вечера: у отдела данных нет прайса поставщика, и триста позиций никто не будет копировать руками — значит, пора вспомнить про веб-скрапинг на Go и colly golang. Colly — самый известный фреймворк обхода в Go-мире: сам ходит по страницам и отдаёт данные из разметки. Разберём, что это за подход, где у него границы и из каких уроков собран курс.

Пятница, шесть вечера. Отдел данных пишет в общий чат: поставщик опять не прислал выгрузку, а прайс нужен к понедельнику — триста позиций, и карточка каждой лежит в открытом каталоге на сайте. В чате два предложения: посадить стажёра копировать в Excel или написать скрипт. Первый вариант уже пробовали в прошлом квартале, и он кончился предсказуемо: к вечеру субботы у стажёра съезжают колонки, в понедельник выясняется, что в двух сотнях строк перепутаны цена и старая цена, а тридцать позиций просто забыты. Второй вариант — это и есть веб-скрапинг: программа скачивает страницы каталога, вынимает из разметки название, цену и наличие, складывает всё в файл, который открывается без слёз. В Go-мире для таких задач есть готовый фреймворк — colly, и весь этот курс про то, как им пользоваться: от первого запроса до обходчика с прокси, задержками и базой данных. Но прежде чем открывать редактор, надо честно ответить на один вопрос, который экономит недели работы.

### Что такое веб-скрапинг и где его границы

**Веб-скрапинг** — автоматическое скачивание страниц сайта и извлечение из них данных: программа делает то же самое, что браузер и человек, только быстрее и без усталости. По устройству это три шага: скачать HTML-ответ, найти в разметке нужные узлы и вытащить из них значения, затем перейти по ссылке на следующую страницу и повторить. Всё усложнение живёт в деталях: сайт может прятать данные за формой входа, отдавать разные страницы под разными адресами, ограничивать темп запросов, а разметка может менять классы при каждом релизе. Границы темы тоже лежат здесь. Скрапят публичные данные — каталоги, карточки товаров, рейтинги, цены; это обычная практика, от агрегаторов до исследовательских проектов. Но обходить авторизацию под чужими учётками, собирать персональные данные или тянуть защищённый контент — уже не технический, а правовой вопрос, и colly тут не помощник. Отдельная строчка — вежливость: скрипт, лупящий сто запросов в секунду, для сайта ничем не отличается от атаки, и нагрузки стоит держать под контролем всегда. В курсе этому посвящён отдельный урок про пределы библиотеки и [защиту от скрапинга](/courses/colly/lessons/22-antibot-zaschita/).

> **Прежде чем скрапить — проверьте, нет ли API.** Скрапинг — последний вариант, а не первый. У многих сайтов есть официальный API, RSS, выгрузка CSV в личном кабинете или страница для партнёров: один запрос к поддержке экономит парсер, который придётся чинить после каждого релиза чужого сайта. API стабильнее разметки: JSON-поля меняются редко, а классы в HTML — при каждом редизайне. Правило простое: сначала письмо менеджеру и страница документации, и только когда официального пути нет — colly.

### Ручной путь: net/http и goquery

Скрапер на Go можно написать и без всяких фреймворков, на голой стандартной библиотеке. Схема известная: http.Get или клиент с настройками из [урока про HTTP-клиент](/courses/go-advanced/lessons/22-http-klient/), чтение тела ответа, а дальше — разбор HTML. Для разбора в Go-мире используют goquery: библиотеку с jQuery-подобными выборками, которая превращает HTML-строку в дерево и позволяет искать узлы CSS-селекторами. Для одной страницы этого хватает с запасом: двадцать строк, и данные на экране. Проблемы начинаются с масштабом. Очередь адресов — ваша, лимит частоты запросов — ваш, повтор при таймауте — ваш, кэш, чтобы не качать одно и то же при отладке, — тоже ваш, cookies между страницами — снова ваши. Каждая из этих вещей по отдельности пишется за час, но вместе это получается второй проект рядом с первым, и в нём столько же ошибок, сколько в самом парсинге. Именно эту обвязку colly и берёт на себя — тем и ценна.

### Colly golang: фреймворк обхода, а не просто HTTP-клиент

colly golang — это фреймворк для обхода сайтов: центральный объект, который называется коллектором, скачивает страницы, разбирает их в DOM и вызывает ваши функции-колбэки на каждом элементе, найденном по CSS-селектору. Вы описываете, на что реагировать — colly делает остальное: держит очередь посещённых адресов, следит за глубиной обхода, умеет ограничивать частоту правилами LimitRule, кэшировать ответы на диск, ходить через прокси, таскать cookies между запросами и отправлять формы. При этом фреймворк остаётся тонкой обвязкой: под капотом всё тот же net/http и goquery, поэтому ничего экзотического внутри нет, а из колбэка доступен и запрос, и ответ целиком. Плата за удобство — абстракция: часть поведения скрыта внутри коллектора, и в редких случаях её приходится вскрывать. На практике это выглядит так: типовой сборщик каталога с пагинацией на colly — несколько десятков строк, а та же программа на голом net/http и goquery — пара сотен, и большую часть из них составляет не парсинг, а обвязка.

### Подход против задачи: что выбрать

| Подход | Что умеет | Когда брать |
| --- | --- | --- |
| Ручное копирование | то, что успеет человек | разовая задача на десять строк, повторять не придётся |
| net/http + goquery | полный контроль над HTTP и DOM, всю обвязку пишете сами | одна-две страницы, нестандартный протокол, жёсткие требования к коду |
| colly | обход, колбэки по селекторам, лимиты, кэш, прокси, cookies, формы | каталоги, пагинация, регулярный сбор — большинство типовых задач |
| chromedp | настоящий браузер: исполняет JavaScript, кликает, ждёт рендер | SPA и витрины, где данных нет в исходном HTML-ответе |

### chromedp: когда страницу рисует JavaScript

У colly есть жёсткий предел, о котором стоит знать в первый же день: она работает с HTML-ответом сервера и не исполняет JavaScript. Для классических серверных страниц этого достаточно — разметка уже содержит данные. Но если сайт собран на фреймворке вроде React или Vue и карточки товаров рисуются в браузере, в исходном ответе будет пустой каркас из пары div-ов, и селекторам нечего ловить. Диагностика простая: откройте исходный код страницы через меню браузера, а не вкладку Elements — инспектор показывает DOM после выполнения скриптов и врёт о том, что реально приехало по сети. Если данных в исходнике нет, берут браузерный движок: chromedp управляет настоящим Chrome, умеет ждать элементы, кликать и забирать результат после рендера, но стоит дороже — тяжёлый процесс, медленный обход, больше памяти. Умная стратегия часто гибридная: браузер один раз вытаскивает адреса реальных запросов данных, а дальше по ним ходит быстрый colly-обходчик. Этой границе посвящён отдельный урок курса — про то, где заканчивается colly.

### Пять проверок перед тем, как писать скрапер

- у сайта есть официальный API, RSS или выгрузка — тогда скрапинг отменяется
- данные публичные: без обхода авторизации и без чужих учётных записей
- robots.txt и правила сайта не запрещают автоматический доступ к нужному разделу
- объём понятен: сколько страниц, как часто, и не ляжет ли сайт от такого темпа
- селектор проверен минимум на двух страницах — разметка редко одинакова до конца каталога

### Карта курса: от первого Visit до монитора цен

Двадцать пять уроков идут по нарастанию сложности, и каждый опирается на предыдущие. Сначала фундамент: во втором уроке — [установка и первый скрапер](/courses/colly/lessons/02-ustanovka-pervyj-skreper/), в третьем и четвёртом — HTML и CSS-селекторы, в пятом — механика колбэков OnHTML. Дальше данные: извлечение значений и структуры Go для них. Потом движение по сайту: обход ссылок, перехват запросов через OnRequest и OnResponse, темп через LimitRule, параллельный режим. Отдельная линия — капризные сайты: пагинация, формы и вход по cookies, заголовки и User-Agent, прокси. Затем устойчивость: обработка ошибок и повторы, кэш на диске, URL-фильтры, чтобы обходчик не разбежался по всему интернету. И склад: JSON, CSV, SQLite — спарсенное должно переживать перезапуск. Финал — [итоговый проект](/courses/colly/lessons/25-itogovyj-proekt/): монитор цен, где обходчик пишёт историю в базу, логирует ход через zap и управляется из командной строки через Cobra — если вы проходили [курс Cobra](/courses/cobra/), тот материал ляжет сюда напрямую. К этому моменту каждый блок пайплайна вы соберёте руками в уроках, проект только склеит их.

### Проверка: с чего начинается задача

**Вопрос:** Отдел попросил собрать данные с сайта поставщика. С какого шага правильно начинать?

- ✅ Проверить, есть ли у сайта официальный API или выгрузка
- Сразу писать скрапер на colly
- Сразу поднимать chromedp с настоящим браузером
- Найти фрилансера, который скопирует данные руками

Скрапинг — последний вариант, а не первый: официальный API или выгрузка стабильнее разметки, не зависит от редизайнов и не создаёт нагрузку на чужой сайт. Colly включается, когда официального пути до данных нет.

### Проверка: возможности фреймворка

**Вопрос:** Что из перечисленного colly делает сама, без дополнительных библиотек?

- Исполняет JavaScript на странице, как браузер
- Делает скриншоты страниц
- ✅ Скачивает страницы, разбирает HTML и вызывает колбэки по CSS-селекторам
- Складывает данные в базу данных своей схемой

Colly — фреймворк HTTP-обхода и разбора разметки: очередь адресов, колбэки по селекторам, лимиты, кэш, прокси. JavaScript она не исполняет — для этого нужен chromedp; скриншоты не делает; хранение данных вы организуете сами.

### Что окажется в исходном HTML-ответе

```go
// Сайт-витрина на React: карточки товаров рисуются в браузере.
// Скрапер на colly запускает OnHTML(".product-card", ...) и Visit.
```

**Что выведет программа?**

- Колбэк вызовется один раз на карточку
- ✅ Колбэк не вызовется ни разу: в ответе сервера карточек нет, их рисует JavaScript
- Скрапер упадёт с ошибкой сети
- Colly сама дождётся рендера и вызовет колбэк

Colly видит только HTML-ответ сервера и не исполняет JavaScript. Если разметку собирает браузер, селекторам нечего ловить — колбэк не сработает ни разу. Такая страница — работа для chromedp или поиск скрытого JSON-эндпоинта.

### Соберите скелет первого скрапера

Восстановите минимальную программу: путь импорта colly второй версии, создание коллектора, селектор текстов цитат и запуск обхода.

```go
package main

import (
        "fmt"
        "github.com/gocolly/colly/___"
)

func main() {
        c := colly.___()

        c.OnHTML("___", func(e *colly.HTMLElement) {
                fmt.Println(e.Text)
        })

        c.___("https://quotes.toscrape.com/")
}
```

Подсказка: Второй мажор версии живёт в пути импорта; коллектор создаёт NewCollector; текст цитаты лежит в span с классом text; обход запускает Visit.

Правильные ответы в пропусках: `v2`, `NewCollector`, `span.text`, `Visit`

### Расставьте строки программы

Соберите первый скрапер по порядку: от объявления пакета до запуска обхода.

Правильный порядок строк:

1. `package main`
2. `import (`
3. `  "fmt"`
4. `  "github.com/gocolly/colly/v2"`
5. `)`
6. `func main() {`
7. `  c := colly.NewCollector()`
8. `  c.OnHTML("h1", func(e *colly.HTMLElement) { fmt.Println(e.Text) })`
9. `  c.Visit("https://quotes.toscrape.com/")`
10. `}`

### Карточки: словарь скрапера

- **Веб-скрапинг** — Автоматическое скачивание страниц и извлечение из них данных: скачать HTML, найти узлы разметки, вытащить значения, перейти дальше.
- **colly** — Фреймворк веб-скрапинга для Go: коллектор обходит страницы, а ваши колбэки срабатывают на элементы по CSS-селекторам.
- **goquery** — Библиотека разбора HTML с jQuery-подобными выборками; под капотом colly — именно она превращает ответ в DOM.
- **chromedp** — Управление настоящим Chrome из Go: исполняет JavaScript, ждёт рендер. Берут, когда данных нет в исходном HTML-ответе.
- **robots.txt** — Файл в корне сайта с правилами для автоматических посетителей. Первый документ, который стоит прочитать перед скрапингом.
- **Домашнее правило курса** — Сначала API, выгрузка или письмо владельцу сайта — и только если официального пути нет, пишем скрапер.

### Что дальше

В следующем уроке появится первая работающая программа: установка через go get, коллектор, правило OnHTML и десять цитат в терминале — [первый скрапер на colly](/courses/colly/lessons/02-ustanovka-pervyj-skreper/) разбирается построчно. Если разметка для вас тёмный лес, третий урок даст необходимый минимум: [HTML для скрапера](/courses/colly/lessons/03-html-dlya-skrepera/) — дерево документа, классы и атрибуты. А если уже хочется понять, зачем нужны все двадцать пять тем, карта курса из блока выше — это она и есть.

> **Примеры курса требуют локального Go.** Интерпретатор в браузере исполняет только чистый Go без сети и сторонних модулей, а скрапер ходит по сети — поэтому блоков с запуском в песочнице в курсе не будет. Понадобится локальный Go и go get github.com/gocolly/colly/v2: настройка занимает минуты, зато все примеры запускаются в вашем терминале на настоящих сайтах.

## Коротко: что запомнить

- Веб-скрапинг — автоматическое извлечение данных из HTML-страниц: скачать, найти узлы, вытащить значения, перейти по ссылке.
- Перед скрапингом проверяют официальные пути до данных: API, выгрузка, RSS; скрапер — последний вариант, а не первый.
- Ручной путь net/http + goquery даёт контроль, но очередь, лимиты, повторы и кэш пишутся руками — это второй проект рядом с парсером.
- colly — фреймворк обхода: коллектор с колбэками по CSS-селекторам, лимитами, кэшем, прокси и cookies из коробки.
- colly не исполняет JavaScript: для SPA нужен chromedp или поиск скрытого JSON-эндпоинта.
- Границы темы — публичные данные, robots.txt и вежливый темп; обход авторизации и персональные данные — не про это.
- Курс: 25 уроков от первого Visit до монитора цен с базой, логами zap и CLI на Cobra.

## Домашнее задание

Выберите любой сайт с публичным каталогом, который вам действительно интересен. Найдите, есть ли у него официальный API, RSS или выгрузка — начните с подвала страницы и раздела для партнёров. Выпишите три проверки из урока: источник данных, robots.txt и примерный объём страниц. Если официального пути нет — просто зафиксируйте, какой раздел и какие поля вы будете собирать во втором уроке.

## Вопросы и ответы по уроку

### Чем colly отличается от обычного HTTP-клиента на Go?

Клиент только качает ответ. Colly — фреймворк обхода: она следит за очередью и глубиной адресов, разбирает HTML в DOM и вызывает ваши функции на каждом элементе по селектору, плюс даёт лимиты частоты, кэш, прокси и cookies без самописной обвязки.

### Можно ли скрапить любой сайт?

Нет. Публичные данные с уважением к robots.txt и нагрузке — обычная практика. Обход авторизации, персональные данные и защищённый контент — правовые риски вне зависимости от технологии. А официальные API всегда предпочтительнее скрапинга.

### Colly не видит данные, которые есть в браузере. Что не так?

Скорее всего, страницу дорисовывает JavaScript: colly работает с исходным HTML-ответом и скрипты не исполняет. Сравните исходный код страницы с вкладкой Elements; если данных в исходнике нет — нужен chromedp или поиск JSON-эндпоинта, откуда браузер берёт данные.
