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

Uploaded Python 3

File details

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

File metadata

  • Download URL: vek_parser-0.1.6.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.6.tar.gz
Algorithm Hash digest
SHA256 b06b79f586ffad545d6b2cab41b2e53d0e349f5dedcadf915618cd987522c52a
MD5 8f9469416a597f4397d779f2f0cecc39
BLAKE2b-256 baa5754b4601ad207ac18213ef0d3df45b9f6322639f712357ca578e3cf28de5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vek_parser-0.1.6-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.6-py3-none-any.whl
Algorithm Hash digest
SHA256 30378e9a82ef8dce088a22e164f01a8d1a55abb2129ea9243d08314eef25be88
MD5 1d398bdfbe71b377b3aca9f047e4e85f
BLAKE2b-256 e78d733836dc6eef15518473bc54aad9e339f4dad7594dde562ddbd93c5cd5e2

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