Как достать данные из script?(Python)
Доброго времени суток товарищи. Столкнулся с проблемой извлечения данных из тега 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. Заранее благодарю за помощь.
Ответы (2 шт):
Автор решения: gord1402
→ Ссылка
Чтобы достать 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
Автор решения: Namerek
→ Ссылка
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))
Товары для животных/Товары для кошек/Наполнители для кошек