/
EmilMarkov
/
VekParser
Обзор
Документация
Войти
/
EmilMarkov
/
VekParser
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
example/main.py
67 строк
2 KB
Emil Markov
fix: исправил структуру библиотеки для корректного импорта
04 мар 2025, 19:47
04 мар 2025, 19:47
57a087b
Код
Авторство
О чём код?
import re import logging from typing import Dict from vek_parser import WebParser class AreaCalculator: @staticmethod def calculate_dimensions(step_config: Dict, context: Dict) -> Dict: result = {} try: measures = { 'width': context.get('width', '0'), 'height': context.get('height', '0'), 'depth': context.get('depth', '0') } dimensions = {} for key, value in measures.items(): cleaned = re.sub(r'[^\d.,]', '', str(value).replace(',', '.')).strip() dimensions[key] = float(cleaned) if cleaned else 0.0 result.update({ 'width': f"{dimensions['width']} см", 'height': f"{dimensions['height']} см", 'depth': f"{dimensions['depth']} см", 'area': round(dimensions['width'] * dimensions['height'], 2), 'volume': round(dimensions['width'] * dimensions['height'] * dimensions['depth'], 2), 'sku': context.get('sku') # Пробрасываем sku напрямую }) if 'price' in context: result['price'] = int(str(context['price']).replace('\xa0', '').replace(' ', '')) except Exception as e: logging.error(f"Dimension calculation error: {str(e)}") result.update({ 'width': None, 'height': None, 'depth': None, 'area': None, 'volume': None, 'sku': None }) return result if __name__ == "__main__": logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) parser = WebParser( config_path='config.yml', base_url='https://parsemachine.com', render_js=False ) parser.register_step_handler('transform', AreaCalculator.calculate_dimensions) parser.register_item_handler('dict', lambda item, _: item) with parser: parser.run() parser.save_data('full_catalog_data.json')