Skip to main content

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

Project description

Полное руководство по настройке VekParser

Основные концепции

Контекст выполнения

  • Динамический словарь данных, передаваемый между шагами
  • Формируется из:
    • Результатов выполнения предыдущих шагов
    • Начального контекста (initial_context)
    • Статических значений (через шаг static)
  • Используется через шаблоны {variable} в URL и параметрах

Жизненный цикл шага

  1. Получение входного контекста
  2. Исполнение логики шага
  3. Сохранение результатов в новый контекст
  4. Передача обогащенного контекста последующим шагам

Структура конфигурационного файла

Корневая структура

steps:            # Обязательный элемент. Список всех шагов
  - name: "..."   # Уникальный идентификатор шага
    type: "..."   # Тип обработки (static/extract/list)
    # ... параметры конкретного типа

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

1. static — статическое заполнение контекста

- name: init_vars
  type: static
  values:         # Фиксированные значения
    items_per_page: 20
    language: "ru"
  next_steps:     # Опциональное продолжение цепочки
    - step: "load_page"     # Имя следующего шага
      context_map:         # Маппинг данных в контекст
        page_num: items_per_page  # page_num = context['items_per_page']

2. extract — извлечение данных со страницы

- name: parse_products
  type: extract
  url: "/catalog?page={page_num}"  # Подстановка из контекста
  data:              # Конфигурация для selectorlib
    products:        # Ключ для сохранения в контекст
      css: "div.product-card"
      multiple: true  # Сбор всех совпадений
      children:       # Вложенные элементы
        title: "h2::text"
        price: ".price::attr(data-value)"
        details_url: "a.more::attr(href)"
  next_steps:
    - step: "process_products"
      context_map:
        product_links: details_url  # Передача ссылок

3. list — параллельная обработка коллекции элементов

- name: process_products
  type: list
  source: product_links  # Источник данных из контекста
  output: parsed_items   # Ключ для сохранения результатов
  steps:                 # Цепочка обработки для каждого элемента
    - name: product_page
      type: extract
      url: "{details_url}"  # URL из элемента коллекции
      data:
        specifications:
          css: "div.specs-table"
          children:
            weight: "span.weight::text"
            dimensions: "span.size::text"

Механизм работы контекста

Пример передачи данных

  1. Исходный контекст:

    {'category_id': 42, 'region': 'eu'}
    
  2. После шага static:

    values: {page: 3, currency: 'USD'}
    

    Контекст → {'category_id': 42, 'region': 'eu', 'page': 3, 'currency': 'USD'}

  3. В шаге extract:

    url: "/v2/{category_id}?region={region}&p={page}"
    

    Результат URL → /v2/42?region=eu&p=3

  4. Результат выполнения extract:

    {'product_count': 15, 'items': [...]}
    

    Обновленный контекст → {..., 'product_count': 15, 'items': [...]}


Полный пример конфигурации

config.yml:

steps:
  - name: initialization
    type: static
    values:
      catalog_section: "electronics"
      max_threads: 8
    next_steps:
      - step: parse_main_category

  - name: parse_main_category
    type: extract
    url: "/categories/{catalog_section}"
    data:
      subcategories:
        css: "ul.subcategories li"
        multiple: true
        children:
          name: "a::text"
          url: "a::attr(href)"
      products:
        css: "div.product-tile"
        multiple: true
        children:
          title: "h3::text"
          product_url: "a::attr(href)"
    next_steps:
      - step: process_subcategories
        context_map:
          subcategory_links: subcategories.url
      - step: process_products
        context_map:
          product_links: products.product_url

  - name: process_subcategories
    type: list
    source: subcategory_links
    output: parsed_subcategories
    steps:
      - name: subcategory_page
        type: extract
        url: "{item}"
        data:
          product_count: "span.count::text"
          description: "div.category-description::text"

  - name: process_products
    type: list
    source: product_links
    output: parsed_products
    steps:
      - name: product_details
        type: extract
        url: "{item}"
        data:
          title: "h1.product-title::text"
          price: "meta[itemprop=price]::attr(content)"
          sku: "div.product-id::text"

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

  1. Порядок объявления шагов не влияет на выполнение — последовательность определяется через next_steps
  2. Точка входа — всегда первый шаг в списке steps
  3. Автоматическое обогащение контекста:
    • Результаты каждого шага добавляются в контекст
    • context_map позволяет переносить данные между шагами
  4. Динамические URL должны использовать шаблоны {variable_name}

Обработка ошибок и отладка

  • Ошибки выполнения шага: Логируются с указанием шага, выполнение продолжается
  • Рекомендации по запросам:
    • Увеличивайте delay при частых ошибках соединения
    • Настраивайте max_workers в зависимости от нагрузки
  • Файл лога: parser.log с детальной информацией (уровень DEBUG)

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.3.tar.gz (8.8 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.3-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vek_parser-0.1.3.tar.gz
  • Upload date:
  • Size: 8.8 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.3.tar.gz
Algorithm Hash digest
SHA256 c9f9497fe8f2efe890b526451c22a7c37b659aed5b93592624f720259dcbbeb1
MD5 1124a9b7e7cde58bbc99568b9cf0d9b4
BLAKE2b-256 4ffd969ace81acff261be100105fab96a406afc7703cb88ea9201d10b81fe2d9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vek_parser-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 8.7 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c0eeca3661a10b869d575fa9350fe08ce8c5647295f45465b306241d687746d5
MD5 662cd275f1505df9ba21c4bbd6934afc
BLAKE2b-256 5df7d331c0524ecb3fd4948e7f5b7375ebb12ceb8ae8704fa85e2280b9ff7b20

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