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.5.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.5-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for vek_parser-0.1.5.tar.gz
Algorithm Hash digest
SHA256 0f9773c4739003932a386df17ae51f629a334ad83334a18f96d771a02d5a3e1d
MD5 2363d282c4491df703fac20ea26fd039
BLAKE2b-256 85f4f382b3703df159993795e3fa7eb187d19f75ffea4d14933597469c1199a7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for vek_parser-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 efcf8a0ce1fd5ff98d33d619f61e73d6368d5d2d0565112e1c52a81954da1c78
MD5 88642ed1e44d16e6717a2dbaba2e2c16
BLAKE2b-256 515f400381760e4641cd4ccd8846fefdd2cec0e424c349b74e300940bb427207

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