Автоматически собирайте страницы документации, очищайте и структурируйте контент, а также преобразуйте данные веб-сайта в готовые к использованию в ИИ выходные данные всего несколькими строками кода.

Изображение предоставлено автором.
# Введение
Веб-краулинг — это процесс автоматического посещения веб-страниц, перехода по ссылкам и сбора контента с веб-сайта в структурированном виде. Он широко используется для сбора больших объемов информации с сайтов документации, статей, баз знаний и других веб-ресурсов.
Сканирование всего веб-сайта и последующее преобразование его контента в формат, пригодный для использования ИИ-агентами, — задача не из простых. Сайты с документацией часто содержат вложенные страницы, повторяющиеся навигационные ссылки, шаблонный контент и непоследовательную структуру страниц. Кроме того, извлеченный контент необходимо очистить, организовать и сохранить таким образом, чтобы он был полезен для последующих рабочих процессов ИИ, таких как поиск информации, ответы на вопросы или системы на основе агентов.
В этом руководстве мы узнаем, почему стоит использовать Olostep вместо Scrapy или Selenium , настроим все необходимое для проекта веб-парсинга, напишем простой скрипт для сбора данных с сайта документации и, наконец, создадим интерфейс с помощью Gradio , чтобы любой желающий мог указать ссылку и другие параметры для сканирования страниц сайта.
# Выбор Olostep вместо Scrapy или Selenium
Scrapy — мощный инструмент, но он создан как полноценная платформа для сбора данных. Это полезно, когда требуется глубокий контроль, но также означает больше подготовительной работы и инженерных задач.
Selenium больше известен своей способностью автоматизировать работу браузера. Он полезен для взаимодействия со страницами, активно использующими JavaScript, но сам по себе не предназначен для сканирования документации.
В случае с Olostep предложение гораздо более прямолинейное: поиск, сканирование, сбор и структурирование веб-данных через единый программный интерфейс (API), с поддержкой удобных для LLM форматов вывода, таких как Markdown , текст, HTML и структурированный JSON . Это означает, что вам не нужно вручную объединять фрагменты для обнаружения, извлечения, форматирования и последующего использования в ИИ.
Для сайтов с документацией это может значительно ускорить путь от URL-адреса к полезному контенту, поскольку вы тратите меньше времени на самостоятельное создание алгоритма сканирования и больше времени на работу с действительно необходимым контентом.
# Установка пакетов и настройка ключа API
Сначала установите пакеты Python , используемые в этом проекте. Для работы официального комплекта разработки программного обеспечения Olostep (SDK) требуется Python версии 3.11 или более поздней.
pip install olostep python-dotenv tqdm
Эти пакеты обрабатывают основные этапы рабочего процесса:
- Olostep подключает ваш скрипт к API Olostep.
- python-dotenv загружает ваш API-ключ из файла .env.
- tqdm добавляет индикатор выполнения, позволяющий отслеживать сохраненные страницы.
Далее создайте бесплатную учетную запись Olostep, откройте панель управления и сгенерируйте ключ API на странице ключей API. Официальная документация и интеграции Olostep направляют пользователей на панель управления для настройки ключа API.

Затем создайте файл .env в папке вашего проекта:
OLOSTEP_API_KEY=ваш_реальный_ключ_API_здесь
Это позволяет отделить ваш API-ключ от кода Python, что является более чистым и безопасным способом управления учетными данными.
# Создание скрипта для обхода веб-страниц
В этой части проекта мы создадим скрипт на Python, который будет сканировать веб-сайт с документацией, извлекать содержимое каждой страницы в формате Markdown, очищать контент и сохранять его локально в виде отдельных файлов. Мы создадим папку проекта, добавим файл Python, а затем напишем код шаг за шагом, чтобы его было легко понять и протестировать.
Сначала создайте папку проекта для вашего веб-краулера. Внутри этой папки создайте новый файл Python с именем crawl_docs_with_olostep.py.
Теперь мы будем добавлять код в этот файл по одному разделу за раз. Это упростит понимание того, что делает каждая часть скрипта и как весь веб-краулер работает вместе.
// Определение параметров сканирования
Для начала импортируйте необходимые библиотеки. Затем определите основные параметры сканирования, такие как начальный URL, глубина сканирования, ограничение количества страниц, правила включения и исключения, а также выходную папку, куда будут сохраняться файлы Markdown. Эти значения определяют, какая часть сайта с документацией будет просканирована и где будут храниться результаты.
import os import re from pathlib import Path from urllib.parse import urlparse from dotenv import load_dotenv from tqdm import tqdm from olostep import Olostep START_URL = «https://docs.olostep.com/» MAX_PAGES = 10 MAX_DEPTH = 1 INCLUDE_URLS = [ «/**» ] EXCLUDE_URLS = [] OUTPUT_DIR = Path(«olostep_docs_output»)
// Создание вспомогательной функции для генерации безопасных имен файлов
Каждую проиндексированную страницу необходимо сохранить как отдельный файл Markdown. Для этого нам нужна вспомогательная функция, которая преобразует URL-адрес в чистое и безопасное для файловой системы имя файла. Это позволит избежать проблем с косыми чертами, символами и другими символами, которые плохо работают в именах файлов.
def slugify_url(url: str) -> str: parsed = urlparse(url) path = parsed.path.strip(«/») if not path: path = «index» filename = re.sub(r»[^a-zA-Z0-9/_-]+», «-«, path) filename = filename.replace(«/», «__»).strip(«-_») return f»{filename or 'page'}.md»
// Создание вспомогательной функции для сохранения файлов Markdown
Далее добавьте вспомогательные функции для обработки извлеченного содержимого перед его сохранением.
Первая функция очищает Markdown, удаляя лишний текст интерфейса, повторяющиеся пустые строки и ненужные элементы страницы, такие как подсказки для обратной связи. Это помогает сохранить файлы, ориентированные на фактическое содержание документации.
def clean_markdown(markdown: str) -> str: text = markdown.replace(«rn», «n»).strip() text = re.sub(r»[s*u200b?s*](#.*?)», «», text, flags=re.DOTALL) lines = [line.rstrip() for line in text.splitlines()] start_index = 0 for index in range(len(lines) — 1): title = lines[index].strip() underline = lines[index + 1].strip() if title and underline and set(underline) == {«=»}: start_index = index break else: for index, line in enumerate(lines): if line.lstrip().startswith(«# «): start_index = index break lines = lines[start_index:] for index, line in enumerate(lines): if line.strip() == «Была ли эта страница полезна?»: lines = lines[:index] break cleaned_lines: list[str] = [] for line in lines: stripped = line.strip() if stripped in {«Copy page», «YesNo», «⌘I»}: continue if not stripped and cleaned_lines and not cleaned_lines[-1]: continue cleaned_lines.append(line) return «n».join(cleaned_lines).strip()
Вторая функция сохраняет очищенный Markdown-файл в выходную папку и добавляет URL-адрес источника в начало файла. Также имеется небольшая вспомогательная функция для удаления старых Markdown-файлов перед сохранением новых результатов сканирования.
def save_markdown(output_dir: Path, url: str, markdown: str) -> None: output_dir.mkdir(parents=True, exist_ok=True) filepath = output_dir / slugify_url(url) content = f»»»— source_url: {url} — {markdown} «»» filepath.write_text(content, encoding=»utf-8″)
Также имеется небольшая вспомогательная функция для очистки старых файлов Markdown перед сохранением новых результатов сканирования.
def clear_output_dir(output_dir: Path) -> None: if not output_dir.exists(): return for filepath in output_dir.glob(«*.md»): filepath.unlink()
// Создание основной логики веб-краулера
Это основная часть скрипта. Она загружает ключ API из файла .env, создает клиент Olostep, запускает сканирование, ждет его завершения, извлекает каждую просканированную страницу в формате Markdown, очищает контент и сохраняет его локально.
Этот раздел объединяет все воедино и превращает отдельные вспомогательные функции в работающий инструмент для сбора документации.
def main() -> None: load_dotenv() api_key = os.getenv(«OLOSTEP_API_KEY») if not api_key: raise RuntimeError(«Отсутствует OLOSTEP_API_KEY в вашем файле .env.» client = Olostep(api_key=api_key) crawl = client.crawls.create( start_url=START_URL, max_pages=MAX_PAGES, max_depth=MAX_DEPTH, include_urls=INCLUDE_URLS, exclude_urls=EXCLUDE_URLS, include_external=False, include_subdomain=False, follow_robots_txt=True, ) print(f»Начато сканирование: {crawl.id}») crawl.wait_till_done(check_every_n_secs=5) pages = list(crawl.pages()) clear_output_dir(OUTPUT_DIR) for page in tqdm(pages, desc=»Сохранение страниц»): try: content = page.retrieve([«markdown»]) markdown = getattr(content, «markdown_content», None) if markdown: save_markdown(OUTPUT_DIR, page.url, clean_markdown(markdown)) except Exception as exc: print(f»Не удалось получить {page.url}: {exc}») print(f»Готово. Файлы сохранены в: {OUTPUT_DIR.resolve()}») if __name__ == «__main__»: main()
Примечание: Полный скрипт доступен здесь: kingabzpro/web-crawl-olostep , веб-краулер и стартовое веб-приложение, созданное с помощью Olostep.
// Тестирование скрипта веб-сканирования
После завершения работы скрипта запустите его из терминала:
python scan_docs_with_olostep.py
В процессе выполнения скрипта вы увидите, как веб-краулер обрабатывает страницы и сохраняет их по одной в виде файлов Markdown в выходной папке.

После завершения сканирования откройте сохраненные файлы, чтобы проверить извлеченное содержимое. Вы должны увидеть чистые, читаемые версии страниц документации в формате Markdown.

На этом этапе содержимое вашей документации готово к использованию в рабочих процессах искусственного интеллекта, таких как поиск, извлечение информации или системы на основе агентов.
# Создание веб-приложения Olostep для веб-сканирования
В этой части проекта мы создадим простое веб-приложение на основе скрипта для обхода веб-страниц. Вместо того чтобы каждый раз редактировать файл Python, это приложение предоставит вам более простой способ ввести URL-адрес документации, выбрать параметры обхода, запустить обход и просмотреть сохраненные файлы Markdown в одном месте.
Код фронтенда этого приложения доступен в файле app.py в репозитории: web-crawl-olostep/app.py .
Это приложение выполняет несколько полезных функций:
- Позволяет ввести начальный URL-адрес для сканирования.
- Позволяет установить максимальное количество страниц для индексации.
- Позволяет контролировать глубину ползания
- Позволяет добавлять шаблоны URL-адресов для включения и исключения.
- Запускает веб-краулер непосредственно из интерфейса.
- Сохраняет проиндексированные страницы в папку на основе URL-адреса.
- Отображает все сохраненные файлы Markdown в выпадающем списке.
- Предварительный просмотр каждого файла Markdown непосредственно в приложении.
- Позволяет очистить предыдущие результаты сканирования одним нажатием кнопки.
Для запуска приложения выполните следующую команду:
python app.py
После этого Gradio запустит локальный веб-сервер и предоставит ссылку следующего вида:
* Запуск по локальному URL: http://127.0.0.1:7860 * Чтобы создать публичную ссылку, установите `share=True` в `launch()`.
После запуска приложения откройте локальный URL-адрес в браузере. В нашем примере мы указали приложению URL-адрес документации Claude Code и попросили его просканировать 50 страниц с глубиной 5.

При нажатии кнопки «Запустить сканирование» приложение передает ваши настройки бэкэнд-краулеру и запускает сканирование. В терминале вы можете наблюдать за ходом сканирования и сохранения страниц по одной.

После завершения сканирования в выходную папку будут внесены сохраненные файлы Markdown. В этом примере вы увидите, что было добавлено 50 файлов.

В этом случае выпадающее меню в приложении автоматически обновляется, поэтому вы можете открыть любой сохраненный файл и просмотреть его непосредственно в веб-интерфейсе в правильно отформатированном формате Markdown.

Это значительно упрощает использование веб-краулера. Вместо того чтобы каждый раз менять значения в коде, вы можете тестировать различные сайты с документацией и настройки сканирования через простой интерфейс. Это также упрощает обмен проектом с другими людьми, которые, возможно, не хотят работать непосредственно с Python.
# Итоговый вывод
Веб-краулинг — это не просто сбор страниц с веб-сайта. Настоящая проблема заключается в преобразовании этого контента в чистые, структурированные файлы, которые система искусственного интеллекта сможет использовать. В этом проекте мы использовали простой скрипт на Python и приложение Gradio, чтобы значительно упростить этот процесс.
Что не менее важно, рабочий процесс достаточно быстр для реального использования. В нашем примере сканирование 50 страниц с глубиной 5 заняло всего около 50 секунд, что показывает, что можно быстро подготовить данные для документации без создания ресурсоемкого конвейера обработки.
Эта настройка позволяет не ограничиваться разовым сканированием. Вы можете запланировать его ежедневное выполнение с помощью cron или планировщика задач, и даже обновлять только те страницы, которые изменились. Это позволит поддерживать актуальность вашей документации, используя при этом минимальное количество ресурсов.
Olostep создан с учетом потребностей команд, которым подобный рабочий процесс необходим для эффективного ведения бизнеса. Он значительно дешевле, чем разработка и поддержка собственного решения для сбора данных, и как минимум на 50% дешевле, чем аналогичные альтернативы на рынке.
По мере роста объемов использования стоимость одного запроса продолжает снижаться, что делает его практичным выбором для крупных конвейеров обработки документации. Именно это сочетание надежности, масштабируемости и высокой экономической эффективности является причиной того, почему некоторые из самых быстрорастущих стартапов, ориентированных на ИИ, полагаются на Olostep для обеспечения работы своей инфраструктуры данных.
Абид Али Аван (@1abidaliawan) — сертифицированный специалист по анализу данных, увлеченный созданием моделей машинного обучения. В настоящее время он занимается созданием контента и написанием технических блогов о технологиях машинного обучения и анализа данных. Абид имеет степень магистра в области управления технологиями и степень бакалавра в области телекоммуникационной инженерии. Его цель — создать продукт на основе искусственного интеллекта с использованием графовой нейронной сети для студентов, страдающих психическими заболеваниями.
Источник: www.kdnuggets.com
























