Skip to main content

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

Project description

Полный гайд по конфигурации VekParser

Базовые концепции

Контекст (Context)

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

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

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

Структура конфига (config.yml)

Корневые элементы

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

Типы шагов (подробно)

1. static — статические данные

- name: setup_vars
  type: static
  values:          # Фиксированные значения
    page: 1
    lang: "en"
  next_steps:      # Опционально. Что выполнить после
    - step: "parse_page"  # Имя следующего шага
      context_map:        # Маппинг данных в контекст
        current_page: page  # current_page = context['page']

2. extract — парсинг страницы

- name: parse_page
  type: extract
  url: "/products?page={current_page}"  # Используем контекст
  data:              # Использует selectorlib синтаксис
    product_list:
      css: "div.product"
      multiple: true
      children:
        title: "h2::text"
        link: "a::attr(href)"
  extract:           # Использует parsel синтаксис
    pagination:
      target: links  # Тип извлечения (links/data/html)
      selector: "a.page-link"
      attr: "data-page"  # Опциональный атрибут
  next_steps:
    - step: "process_products"
      context_map:
        items: product_list  # Передаем список продуктов

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

  • links: список {url, text, [attr]}
  • data: словарь {field: value}
  • html: сырой HTML/текст

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

- name: process_products
  type: list
  source: items     # Откуда брать элементы (из контекста)
  output: products  # Куда сохранить результат
  steps:            # Вложенные шаги для каждого элемента
    - name: product_detail
      type: extract
      url: "{link}"  # URL из элемента списка
      extract:
        specs:
          target: data
          selectors:
            sku: "div#sku::text"
            price: "span.price::text"

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

Пример потока данных

  1. Начальный контекст:

    {'category': 'electronics'}
    
  2. После шага static:

    values: {page: 1}
    

    Контекст → {'category': 'electronics', 'page': 1}

  3. В extract шаге:

    url: "/catalog/{category}?page={page}"
    

    URL → /catalog/electronics?page=1

  4. Результат extract шага:

    {'products': [...]}
    

    Новый контекст → {..., 'products': [...]}


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

config.yml:

steps:
  - name: init
    type: static
    values:
      base_category: "smartphones"
    next_steps:
      - step: parse_category

  - name: parse_category
    type: extract
    url: "/shop/{base_category}"
    extract:
      subcategories:
        target: links
        selector: "nav.subcategories a"
        attr: "data-id"
      items:
        target: links
        selector: "div.product-card a.title"
    next_steps:
      - step: process_subcategories
        context_map:
          subcats: subcategories
      - step: process_items
        context_map:
          products: items

  - name: process_subcategories
    type: list
    source: subcats
    output: parsed_subcats
    steps:
      - name: parse_subcategory
        type: extract
        url: "{url}"
        extract:
          title: "h1::text"
          description: "div.content::text"

  - name: process_items
    type: list
    source: products
    output: parsed_products
    steps:
      - name: item_page
        type: extract
        url: "{url}"
        extract:
          details:
            target: data
            selectors:
              brand: "meta[itemprop='brand']::attr(content)"
              rating: "span.score::text"

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

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

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

  • При ошибке в шаге: запись в лог, переход к следующему элементу
  • Для повтора запросов: увеличивайте delay в конструкторе
  • Для отладки: смотрите 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.0.tar.gz (7.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.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vek_parser-0.1.0.tar.gz
  • Upload date:
  • Size: 7.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.0.tar.gz
Algorithm Hash digest
SHA256 fd8d446f232173279d51e455b78555f3c0874834785982f721df81e9bf9e94a4
MD5 afe6cf75d9a0011bc9a48e30e097dcc5
BLAKE2b-256 99c94adfa569fba0248a9cdaa7584ed65115214a4943e9b4da0094308fd71444

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vek_parser-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 101afadacb6fcc59deed17b22c7e553843b0239c6ad89e52ea205cb3a260469b
MD5 c2e34a78386bc5300602d4800133f678
BLAKE2b-256 df5377a6c1eb92f91cf32218b112bd75b6ec86c9e4a357f192f7fd2d30cc4310

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