Универсальный парсер для сбора структурированных данных с веб-сайтов
Project description
VekParser: Расширяемый парсер для веб-сайтов
Основные возможности
- Многоступенчатая обработка данных через YAML-конфигурацию
- Поддержка параллельного выполнения задач
- Встроенные механизмы для работы с динамическим контентом (через Playwright)
- Кастомные обработчики данных
- Автоматическое сохранение результатов в JSON
Ключевые концепции
Типы шагов обработки
| Тип | Назначение | Особенности |
|---|---|---|
| static | Инициализация статических значений | Задает начальный контекст выполнения |
| extract | Извлечение данных со страницы | Использует CSS/XPath селекторы |
| list | Параллельная обработка коллекций | Запускает вложенные цепочки шагов |
| save | Финализация и сохранение результата | Экспорт в JSON-файл |
Жизненный цикл данных
- Инициализация контекста (static)
- Извлечение данных (extract)
- Обработка списка (list)
- Сохранение (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'
)
Советы по оптимизации
- Настройка параллелизма:
WebParser(max_workers=10)
- Интервал запросов:
HttpClient(request_interval=1.0)
- 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.7.tar.gz
(10.6 kB
view details)
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.7.tar.gz.
File metadata
- Download URL: vek_parser-0.1.7.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
089bcddcef169ccf3be711c842a596c6a661cdbc4c818e4de01ed83532c8057a
|
|
| MD5 |
be657a6c3d5ec563e43bc394662c375c
|
|
| BLAKE2b-256 |
b9054882802d9740354b305108bd00439e121e0c5f9b7683f9a39a8f708cc161
|
File details
Details for the file vek_parser-0.1.7-py3-none-any.whl.
File metadata
- Download URL: vek_parser-0.1.7-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
743213998cdbf51da3515beda9f9cd4f4b0f4bb2bad6eeace4c8eefda2431523
|
|
| MD5 |
a8c393aeaeeece78bb47ee684e9c7e23
|
|
| BLAKE2b-256 |
dc153eb706185923eb7512728a7c0426a8b1ac1fbe64e968e8e275bd4aa213bf
|