Skip to main content

Универсальный парсер для сбора структурированных данных с веб-сайтов

Project description

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)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vek_parser-0.1.7.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vek_parser-0.1.7-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file vek_parser-0.1.7.tar.gz.

File metadata

  • Download URL: vek_parser-0.1.7.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for vek_parser-0.1.7.tar.gz
Algorithm Hash digest
SHA256 089bcddcef169ccf3be711c842a596c6a661cdbc4c818e4de01ed83532c8057a
MD5 be657a6c3d5ec563e43bc394662c375c
BLAKE2b-256 b9054882802d9740354b305108bd00439e121e0c5f9b7683f9a39a8f708cc161

See more details on using hashes here.

File details

Details for the file vek_parser-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: vek_parser-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for vek_parser-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 743213998cdbf51da3515beda9f9cd4f4b0f4bb2bad6eeace4c8eefda2431523
MD5 a8c393aeaeeece78bb47ee684e9c7e23
BLAKE2b-256 dc153eb706185923eb7512728a7c0426a8b1ac1fbe64e968e8e275bd4aa213bf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page