Как достать данные из script?(Python)

Рейтинг: 0Ответов: 2Опубликовано: 10.05.2023

Доброго времени суток товарищи. Столкнулся с проблемой извлечения данных из тега script при парсинге. Тег скрипт:

<script>
    // fbq('track', 'ViewContent');

    catalogItems = catalogItems || [];
    catalogItems = [{
            'name': "Наполнитель N1 Силикагель 5л Crystals", // название товара
            'id': '38573', // Идентификатор/артикул товара
            'price': '659.9', // Стоимость за единицу товара
            'brand': 'N1', // Торговая марка
            'category': 'Товары для животных/Товары для кошек/Наполнители для кошек', // Дерево категорий, где в качестве разделителя используется символом косой черты «/». Можно указать до пяти уровней иерархии.
            'variant': '', //Вариант товара если есть. Пример: "Черный" или "700х700 мм"
            'coupon': '' //название акции, если товар учувствует в акции, если нет, то пустое значение
        }
    ];
    dataLayer = dataLayer || [];
    dataLayer.push({
        'event': 'myEvent',
        'eventdata': {
            'category': 'ecommerce',
            'action': 'productDetail',
            'ni': 1
        },
        'ecommerce': {
            'currencyCode': 'RUB',
            'detail': {
                'products': [{
                    'name': "Наполнитель N1 Силикагель 5л Crystals", // название товара
                    'id': '38573', // Идентификатор/артикул товара
                    'price': '659.9', // Стоимость за единицу товара
                    'brand': 'N1', // Торговая марка
                    'category': 'Товары для животных/Товары для кошек/Наполнители для кошек', // Дерево категорий, где в качестве разделителя используется символом косой черты «/». Можно указать до пяти уровней иерархии.
                    'variant': '', //Вариант товара если есть. Пример: "Черный" или "700х700 мм"
                    'coupon': '' //название акции, если товар учувствует в акции, если нет, то пустое значение
                }]
            }
        }
    });
</script>

Мне нужно достать тег category. Заранее благодарю за помощь.

Ответы

▲ 1Принят

Чтобы достать category из скрипта, достаточно использовать несколько срезов:

def get_catalog(script):
    crop = script[script.find('catalogItems = [{'):script.find('dataLayer = dataLayer || [];')]
    crop = crop[crop.find("category': '") + 12:]
    crop = crop[:crop.find("',")]
    return crop
▲ 1
import re
html_code = """<script>
// fbq('track', 'ViewContent');

catalogItems = catalogItems || [];
catalogItems = [{
        'name': "Наполнитель N1 Силикагель 5л Crystals", // название товара
        'id': '38573', // Идентификатор/артикул товара
        'price': '659.9', // Стоимость за единицу товара
        'brand': 'N1', // Торговая марка
        'category': 'Товары для животных/Товары для кошек/Наполнители для кошек', // Дерево категорий, где в качестве разделителя используется символом косой черты «/». Можно указать до пяти уровней иерархии.
        'variant': '', //Вариант товара если есть. Пример: "Черный" или "700х700 мм"
        'coupon': '' //название акции, если товар учувствует в акции, если нет, то пустое значение
    }
];
dataLayer = dataLayer || [];
dataLayer.push({
    'event': 'myEvent',
    'eventdata': {
        'category': 'ecommerce',
        'action': 'productDetail',
        'ni': 1
    },
    'ecommerce': {
        'currencyCode': 'RUB',
        'detail': {
            'products': [{
                'name': "Наполнитель N1 Силикагель 5л Crystals", // название товара
                'id': '38573', // Идентификатор/артикул товара
                'price': '659.9', // Стоимость за единицу товара
                'brand': 'N1', // Торговая марка
                'category': 'Товары для животных/Товары для кошек/Наполнители для кошек', // Дерево категорий, где в качестве разделителя используется символом косой черты «/». Можно указать до пяти уровней иерархии.
                'variant': '', //Вариант товара если есть. Пример: "Черный" или "700х700 мм"
                'coupon': '' //название акции, если товар учувствует в акции, если нет, то пустое значение
            }]
        }
    }
});
"""

print(re.search(r"(?<='category': ').+?(?=',)", html_code).group(0))

Товары для животных/Товары для кошек/Наполнители для кошек