Собираем парсер. Его задача — этично забрать нужные данные со страницы, привести их в порядок и сохранить снимок в историю. Всё это соберёт Claude Code по заданию.
🎯 После урока сможешь: собрать парсер, который этично забирает данные и сохраняет их в историю.
Шаг 1. Задание для Claude Code
«Сделай парсер цен с каталога [адрес]: забирает название и цену, уважает robots.txt, делает паузу между запросами, сохраняет снимок в SQLite с датой. Библиотеки httpx и BeautifulSoup».

Шаг 2. Как устроен сбор
Каркас простой: httpx скачивает страницу, BeautifulSoup достаёт нужные кусочки (название, цену), результат складываем в базу со снимком по дате.
import httpx
from bs4 import BeautifulSoup
html = httpx.get(URL, timeout=10).text
soup = BeautifulSoup(html, "html.parser")
for card in soup.select(".course-card"):
name = card.select_one(".title").text.strip()
price = card.select_one(".price").text.strip()
save_snapshot(name, price) # снимок в SQLite с датой
Этика прямо в коде: перед сбором парсер проверяет robots.txt и делает паузу между запросами (например, 1–2 секунды), чтобы не создавать нагрузку на чужой сайт. Это не «замедление ради галочки», а правило хорошего тона и защита от блокировки.
Шаг 3. История в базе
Каждый запуск добавляет в SQLite новый снимок: название, цена, дата. Так со временем накапливается история, по которой видно динамику — это и отличает мониторинг от разового сбора.
Контрольный вопрос. Какие две библиотеки Claude Code использует, чтобы скачать страницу и достать из неё данные? Впиши обе (через пробел или запятую).
Исходный код для этого задания:
import httpx from bs4 import BeautifulSoupПодсказка: Оба имени перечислены в самом начале кода парсера, в строках с import: одна отвечает за скачивание страницы, вторая — за разбор HTML.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Зачем парсер делает паузу между запросами?
Подсказка: Вспомни правило «не долбить» из урока про этику.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Зачем сохранять каждый запуск как снимок в SQLite?
Подсказка: Ценность мониторинга — в сравнении со вчерашним.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Какие два действия парсер должен выполнить, чтобы соответствовать этике сбора данных из этого урока? Отметь ВСЕ верные.
Выберите все верные варианты.
Подсказка: В коде этика реализована двумя конкретными шагами — вспомни callout про этику прямо в коде.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. У другого сайта та же структура карточки, но классы называются иначе: карточка товара — item, цена — cost. Как будет выглядеть строка кода, которая достаёт цену, если в примере из урока это card.select_one(«.price»).text.strip()? Впиши строку целиком, заменив только нужный класс.
Исходный код для этого задания:
for card in soup.select(".course-card"): name = card.select_one(".title").text.strip() price = card.select_one(".price").text.strip() save_snapshot(name, price)Подсказка: Меняется только имя класса внутри select_one — сам приём (select_one, .text.strip()) остаётся таким же, как в примере.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Что дальше
Парсер собирает историю. Но данные сами по себе — это ещё не ценность. В следующем уроке подключим Claude API: он оценит, что изменилось важного, и напишет человеческий отчёт.
