Skip to main content

VekParser: Расширяемый парсер для веб-сайтов

Основные возможности

  • Многоступенчатая обработка данных через YAML-конфигурацию
  • Поддержка параллельного выполнения задач
  • Встроенные механизмы для работы с динамическим контентом (через Playwright)
  • Кастомные обработчики данных
  • Автоматическое сохранение результатов в JSON

Ключевые концепции

Типы шагов обработки

Тип Назначение Особенности
static Инициализация статических значений Задает начальный контекст выполнения
extract Извлечение данных со страницы Использует CSS/XPath селекторы
list Параллельная обработка коллекций Запускает вложенные цепочки шагов
save Финализация и сохранение результата Экспорт в JSON-файл

Жизненный цикл данных

  1. Инициализация контекста (static)
  2. Извлечение данных (extract)
  3. Обработка списка (list)
  4. Сохранение (save)

Полная структура конфигурации

steps:
  - name: уникальное_имя_шага
    type: [static|extract|list|save|свой тип]
    
    # Параметры для static
    values: { ключ: значение }
    
    # Параметры для extract
    url: "шаблон_URL"
    data: { селекторы }
    
    # Параметры для list
    source: "ключ_в_контексте"
    output: "выходной_ключ"
    handler_name: [string|link|dict|свой обработчик]
    
    # Общие параметры
    next_steps:
      - step: "имя_следующего_шага"
        context_map: { ключ: "значение_из_контекста" }

Расширенные возможности

1. Кастомные обработчики шагов

Регистрация пользовательской логики:

class DataProcessor:
    @staticmethod
    def process_data(step_config: Dict, context: Dict) -> Dict:
        return {"processed": True}

parser.register_step_handler('transform', DataProcessor.process_data)

Пример использования в конфиге:

- name: advanced_transform
  type: transform
  next_steps: [...]

2. Обработчики элементов списка

Поддерживаемые типы:

  • string - текстовые элементы
  • link - URL-адреса

Регистрация обработчика для словарей:

parser.register_item_handler('dict', lambda item, _: item)

Конфигурация:

- name: process_items
  type: list
  handler_name: dict
  steps: [...]

3. Механизм сохранения данных

Конфигурация шага сохранения:

- name: save_results
  type: save
  fields:
    - field1
    - field2

Результат:

[
  {
    "field1": "value1",
    "field2": "value2"
  },
  {
    "field1": "value3",
    "field2": "value4"
  }
]

Полный пример парсера

1. Код обработчика

class AreaCalculator:
    @staticmethod
    def calculate_dimensions(step_config: Dict, context: Dict) -> Dict:
        # Логика вычислений
        return {
            'area': width * height,
            'volume': width * height * depth
        }

2. Конфигурация

steps:
  - name: product_processing
    type: list
    handler_name: dict
    steps:
      - name: extract_data
        type: extract
        url: "{link}"
        data:
          price: "#price::text"
          dimensions: ".specs::text"
        next_steps:
          - step: calculate_metrics
          
      - name: calculate_metrics
        type: transform
        next_steps:
          - step: save_product
          
  - name: save_product
    type: save
    fields:
      - title
      - price
      - area
      - volume

3. Инициализация парсера

parser = WebParser(
    config_path='config.yml',
    base_url='https://example.com',
    render_js=True
)
parser.register_step_handler('transform', AreaCalculator.calculate_dimensions)
parser.register_item_handler('dict', lambda item, _: item)

Отладка и мониторинг

Логирование

Уровни логирования:

  • DEBUG: детальная информация о выполнении шагов
  • INFO: основные этапы работы
  • WARNING: проблемы с доступностью ресурсов
  • ERROR: критические ошибки выполнения

Настройка:

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

Советы по оптимизации

  1. Настройка параллелизма:
WebParser(max_workers=10)
  1. Интервал запросов:
HttpClient(request_interval=1.0)
  1. JS-рендеринг:
WebParser(render_js=True)

Metadata

Release files for vek-parser 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vek-parser 0.1.7
File Size Uploaded
vek_parser-0.1.7.tar.gz 10.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vek-parser 0.1.7
File Interpreter ABI Platform
vek_parser-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 20.2 kB

Release files / vek_parser-0.1.7.tar.gz

Download URL vek_parser-0.1.7.tar.gz
Size 10.6 kB
Tags Source
SHA-256 checksum
How to use checksums
089bcddcef169ccf3be711c842a596c6a661cdbc4c818e4de01ed83532c8057a
BLAKE2b-256 checksum
How to use checksums
b9054882802d9740354b305108bd00439e121e0c5f9b7683f9a39a8f708cc161
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / vek_parser-0.1.7-py3-none-any.whl

Download URL vek_parser-0.1.7-py3-none-any.whl
Size 9.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
743213998cdbf51da3515beda9f9cd4f4b0f4bb2bad6eeace4c8eefda2431523
BLAKE2b-256 checksum
How to use checksums
dc153eb706185923eb7512728a7c0426a8b1ac1fbe64e968e8e275bd4aa213bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page