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

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

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

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

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

Терминал Claude Code: парсер запущен, в логах видно, что собрано N позиций и снимок сохранён в базу.

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

Подсказка: Первая скачивает страницу, вторая (BeautifulSoup) разбирает HTML. Смотри импорты.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Зачем парсер делает паузу между запросами?

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

Подсказка: Вспомни правило «не долбить» из урока про этику.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Зачем сохранять каждый запуск как снимок в SQLite?

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

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

Онлайн-проверка ответа появится позже

Что дальше

Парсер собирает историю. Но данные сами по себе — это ещё не ценность. В следующем уроке подключим Claude API: он оценит, что изменилось важного, и напишет человеческий отчёт.

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

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