Универсальный парсер для сбора структурированных данных с веб-сайтов
Project description
Полный гайд по конфигурации VekParser
Базовые концепции
Контекст (Context)
- Словарь данных, передаваемый между шагами
- Формируется из:
- Результатов предыдущих шагов
- initial_context (передается при запуске)
- Ручных значений (через шаг
static)
- Используется через
{variable}в URL и параметрах
Жизненный цикл шага
- Получение входного контекста
- Выполнение логики шага
- Сохранение результатов в новый контекст
- Передача данных в следующие шаги
Структура конфига (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"
Механика работы контекста
Пример потока данных
-
Начальный контекст:
{'category': 'electronics'}
-
После шага static:
values: {page: 1}
Контекст →
{'category': 'electronics', 'page': 1} -
В extract шаге:
url: "/catalog/{category}?page={page}"
URL →
/catalog/electronics?page=1 -
Результат 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"
Правила составления конфига
- Порядок шагов в YAML не важен — выполнение определяется next_steps
- Всегда стартует первый шаг в списке
steps - Контекст автоматически обогащается:
- Результатами каждого шага
- Данными из context_map
- Для работы с динамическими 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
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.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd8d446f232173279d51e455b78555f3c0874834785982f721df81e9bf9e94a4
|
|
| MD5 |
afe6cf75d9a0011bc9a48e30e097dcc5
|
|
| BLAKE2b-256 |
99c94adfa569fba0248a9cdaa7584ed65115214a4943e9b4da0094308fd71444
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
101afadacb6fcc59deed17b22c7e553843b0239c6ad89e52ea205cb3a260469b
|
|
| MD5 |
c2e34a78386bc5300602d4800133f678
|
|
| BLAKE2b-256 |
df5377a6c1eb92f91cf32218b112bd75b6ec86c9e4a357f192f7fd2d30cc4310
|