Универсальный парсер для сбора структурированных данных с веб-сайтов
Project description
Полное руководство по настройке VekParser
Основные концепции
Контекст выполнения
- Динамический словарь данных, передаваемый между шагами
- Формируется из:
- Результатов выполнения предыдущих шагов
- Начального контекста (initial_context)
- Статических значений (через шаг
static)
- Используется через шаблоны
{variable}в URL и параметрах
Жизненный цикл шага
- Получение входного контекста
- Исполнение логики шага
- Сохранение результатов в новый контекст
- Передача обогащенного контекста последующим шагам
Структура конфигурационного файла
Корневая структура
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"
Механизм работы контекста
Пример передачи данных
-
Исходный контекст:
{'category_id': 42, 'region': 'eu'}
-
После шага static:
values: {page: 3, currency: 'USD'}
Контекст →
{'category_id': 42, 'region': 'eu', 'page': 3, 'currency': 'USD'} -
В шаге extract:
url: "/v2/{category_id}?region={region}&p={page}"
Результат URL →
/v2/42?region=eu&p=3 -
Результат выполнения 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"
Правила построения конфигурации
- Порядок объявления шагов не влияет на выполнение — последовательность определяется через
next_steps - Точка входа — всегда первый шаг в списке
steps - Автоматическое обогащение контекста:
- Результаты каждого шага добавляются в контекст
context_mapпозволяет переносить данные между шагами
- Динамические 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9f9497fe8f2efe890b526451c22a7c37b659aed5b93592624f720259dcbbeb1
|
|
| MD5 |
1124a9b7e7cde58bbc99568b9cf0d9b4
|
|
| BLAKE2b-256 |
4ffd969ace81acff261be100105fab96a406afc7703cb88ea9201d10b81fe2d9
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0eeca3661a10b869d575fa9350fe08ce8c5647295f45465b306241d687746d5
|
|
| MD5 |
662cd275f1505df9ba21c4bbd6934afc
|
|
| BLAKE2b-256 |
5df7d331c0524ecb3fd4948e7f5b7375ebb12ceb8ae8704fa85e2280b9ff7b20
|