Собираем парсер с историей

Собираем парсер. Его задача — этично забрать нужные данные со страницы, привести их в порядок и сохранить снимок в историю. Всё это соберёт Claude Code по заданию.

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

Шаг 1. Задание для Claude Code

«Сделай парсер цен с каталога [адрес]: забирает название и цену, уважает robots.txt, делает паузу между запросами, сохраняет снимок в SQLite с датой. Библиотеки httpx и BeautifulSoup».

Приложение Claude: во встроенном терминале запущен парсер, в выводе собрано 24 позиции и снимок сохранён в базу.

Шаг 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?

АСнимки не нужны: достаточно последних данных, они самые точные
БЧтобы копилась история и было видно, что изменилось
ВЧтобы парсер запускался быстрее — снимок хранит его настройки

Подсказка: Ценность мониторинга — в сравнении со вчерашним.

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

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

Выберите все верные варианты.

АПроверить robots.txt перед началом сбора
БДелать паузу между запросами (например, 1–2 секунды)
ВСобирать данные как можно быстрее, без пауз
ГПропустить проверку robots.txt, если сайт публичный

Подсказка: В коде этика реализована двумя конкретными шагами — вспомни 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: он оценит, что изменилось важного, и напишет человеческий отчёт.

← Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева