Colly: веб-скрапинг на Go с нуля
Вечер пятницы, а у отдела данных всё та же жалоба: поставщик снова не выгрузил прайс, и копировать триста позиций руками никто не будет. Или так: нужно собрать сотню страниц каталога в таблицу, а в руках только Go и половина вечера. Colly — фреймворк для именно таких задач: вы объявляете, на какие элементы страниц реагировать, а обходчик сам ходит по ссылкам, выдёргивает данные и держит темп, который вы ему задали.
Курс собран вокруг боевых сценариев: первый скрапер за десять минут, каталог с пагинацией, вход по логину с cookies, вежливые задержки через LimitRule, ротация прокси, переживание сетевых ошибок, складирование результатов в JSON, CSV и базу. Отдельные уроки — про честные пределы библиотеки: сайты, рендерящиеся на JavaScript, она не видит; robots.txt и антиботы никуда не делись; и мы проговорим, где заканчивается colly и начинается chromedp.
Итоговый проект — монитор цен: обходчик собирает карточки товаров, пишет изменения в базу, логирует ход через zap и управляется из командной строки через Cobra. К этому моменту каждый блок пайплайна вы уже собирали руками — проект только склеит их вместе.
Чему научитесь
Чему научитесь
- Писать скраперы на Colly от первого Visit до обхода целого сайта
- Вынимать данные через CSS-селекторы и складывать в структуры Go
- Настраивать темп: задержки, параллелизм, лимиты на домен
- Работать с капризными сайтами: заголовки, cookies, прокси
- Переживать ошибки сети: таймауты, повторы, деградация
- Сохранять результат в JSON, CSV и базу данных
- Знать пределы библиотеки: JS-рендеринг, антиботы, правовые границы
Для кого курс
- Разработчикам, которым надо выдёргивать данные из чужих сайтов и отчётов
- Аналитикам и маркетологам с базовым Go: прайсы, каталоги, мониторинг
- Тем, кто хочет в портфолио живую утилиту, а не очередной CRUD
Что понадобится
- Базовый Go: функции, структуры, срезы, ошибки (курс «Go с нуля»)
- Общее представление об HTML: теги, атрибуты, классы
Программа курса: 25 уроков
- 1Знакомство с Colly: зачем скрапить на GoЧто такое веб-скрапинг, где у colly границы и чем она лучше curl с регулярками.~16 мин · colly golang, веб-скрапинг go
- 2Установка и первый скрапер на Collycolly.NewCollector, OnHTML и Visit: разбор первой программы построчно.~18 мин · colly первый скрапер, colly newcollector
- 3HTML для скрапера: DOM, теги, атрибутыМинимум разметки, которого хватает: дерево документа, классы, id, data-атрибуты.~16 мин · html для парсинга, dom дерево страницы
- 4CSS-селекторы в Colly: от тегов до комбинацийТеги, классы, вложенность, атрибуты и псевдоклассы внутри OnHTML.~18 мин · css селекторы парсинг, colly селекторы
- 5OnHTML: колбэки, порядок вызовов и цепочкиКак colly обходит DOM, несколько OnHTML на один скрапер, вложенные выборки.~18 мин · colly onhtml, onhtml колбек
- 6Извлечение данных: Text, Attr, ChildTexte.Text, e.Attr, ChildAttr, ChildText и ForEach: все способы достать значение.~18 мин · colly text attr, извлечение данных парсер
- 7Структуры для спарсенного: модели и слайсыСкладываем данные в структуры, аккумулируем между колбэками, избегаем гонок.~16 мин · структуры данных go парсер, модель данных скрапер
- 8Навигация по сайту: обход ссылок и глубинаVisit из колбэка, MaxDepth, очередь URL и обход целого раздела.~18 мин · colly обход ссылок, скрапинг всего сайта
- 9OnRequest и OnResponse: запросы под контролемURL, заголовки, статус-коды и тело ответа: что видно на каждом шаге.~16 мин · colly onrequest, colly onresponse
- 10LimitRule: задержки и параллелизмDelay, RandomDelay, DomainGlob: вежливый скрапер, который не DDoS-ит сайт.~18 мин · colly limitrule, colly delay парсинг
- 11Параллельный скрапинг: Async и WaitGroupАсинхронный обход, синхронизация результата и ловушки гонок.~18 мин · colly async, параллельный парсинг go
- 12Пагинация: обходим все страницы каталогаСсылка «следующая», номера страниц, стоп-условия и вечные каталоги.~18 мин · colly пагинация, парсер каталога страниц
- 13Формы и вход: POST, cookies, сессииОтправка форм, логин на сайте, хранение cookies между запросами.~20 мин · colly форма отправка, colly логин cookies
- 14User-Agent и заголовки: когда сайт капризничаетOnRequest-заголовки, Referer, Accept-Language и честные пределы маскировки.~16 мин · colly user agent, заголовки http парсер
- 15Прокси в Colly: ротация и пул адресовSetProxy, ProxyFunc, пул и ротация между запросами.~18 мин · colly proxy, ротация прокси парсинг
- 16Ошибки и повторы: OnError и таймаутыОбработка ошибок сети, повторные попытки и скрапер, который не падает.~18 мин · colly onerror, colly повтор запроса
- 17Кэш и офлайн-режим: не дёргаем сайт дваждыCacheDir, сохранение HTML на диск и воспроизводимость сбора.~16 мин · colly cache, кэш парсера go
- 18URL-фильтры: AllowedDomains, URLFilters, DepthКуда можно ходить: правила навигации и защита от разбегания по интернету.~16 мин · colly alloweddomains, colly urlfilter
- 19Сохраняем результат: JSON и CSVМаршалинг структур в файл, csv.Writer и формат отчёта, который переживёт месяц.~18 мин · сохранение данных парсер, json csv go
- 20База данных: складируем спарсенное в SQLitedatabase/sql, upsert, батчи: история цен вместо разовых дамп-файлов.~18 мин · парсер в базу данных go, sqlite golang
- 21Когда есть API: JSON вместо HTMLOnResponse и encoding/json: как понять, что сайту можно не скрапить DOM.~16 мин · парсинг json api go, api вместо html
- 22Защита от скрапинга: честные пределы Collyrobots.txt, капчи, JS-рендеринг: что colly не умеет и что делают вместо неё.~18 мин · защита от парсинга, colly javascript сайт
- 23Тестирование скрапера: httptest и фикстурыЛокальный тест-сервер, фикстуры HTML и регрессионные тесты селекторов.~18 мин · тестирование парсера go, httptest пример
- 24CLI-скрапер: связка Cobra и CollyФлаги, конфиг и zap-логи: превращаем скрипт в консольный инструмент.~18 мин · cli скрапер go, cobra colly
- 25Итоговый проект: монитор цен с алертамиПолный пайплайн: обход, парсинг, база, логи, отчёт — всё из одного бинарника.~24 мин · colly итоговый проект, монитор цен go
Вопросы о курсе
Законно ли делать парсинг сайтов?
Законность зависит от сайта и данных: публичные страницы с уважением к robots.txt и нагрузке — обычная практика, а вот обход авторизации, личные данные и копирование защищённого контента — уже правовые риски. В курсе этим занимается отдельный урок, и правила вежливости соблюдаются с первого.
Справится ли Colly с сайтами на JavaScript?
Нет: Colly работает с HTML-ответом сервера и не исполняет JavaScript. Для SPA и динамических витрин нужен браузерный движок — chromedp или Rod; в курсе есть урок о том, где проходит граница и как заранее понять, что сайт рендерится в браузере.
Код уроков запускается в браузере?
Скрапер ходит по сети, поэтому основные примеры выполняются локально. В каждом уроке — построчный разбор кода, интерактивные задания и тесты, а в 1-2 текстовых местах честно сказано, что запускать нужно локальный Go.