Как достать среди js кода json при парсинге сайта в тэге <script>? Python

Рейтинг: -1Ответов: 1Опубликовано: 13.07.2023

При парсинге собираю из тэга такой текст:

$(document).ready(function() {
        $('#commodity-show-images').bxSlider({ mode: 'horizontal', auto: false, controls: true, pager: false, speed: 200 });
        itemSelector=$('#commodity-show-form').sumoSelector({ "submitId": "commodity-show-addcart-submit", "params": [['color', 'Farve'], ['size', 'Størrelse']], "items": { "141513": { "params": ["BLACK", "36 2/3"], "availability": "1"}, "141514": { "params": ["BLACK", "37 1/3"], "availability": "1"}, "141515": { "params": ["BLACK", "38"], "availability": "1"}, "141516": { "params": ["BLACK", "38 2/3"], "availability": "1"}, "141517": { "params": ["BLACK", "39 1/3"], "availability": "1"}, "141518": { "params": ["BLACK", "40"], "availability": "1"}, "141519": { "params": ["BLACK", "40 2/3"], "availability": "1"}, "141520": { "params": ["BLACK", "41 1/3"], "availability": "1"}, "141521": { "params": ["BLACK", "42"], "availability": "1"}, "141522": { "params": ["BLACK", "43 1/3"], "availability": "1"}, "141523": { "params": ["BLACK", "44"], "availability": "1"}, "141524": { "params": ["BLACK", "44 2/3"], "availability": "1"}, "141525": { "params": ["BLACK", "45 1/3"], "availability": "1"}, "141526": { "params": ["BLACK", "46"], "availability": "1"} }, "pids": ["141513", "141514", "141515", "141516", "141517", "141518", "141519", "141520", "141521", "141522", "141523", "141524", "141525", "141526"], "sizes": ["36 2/3", "37 1/3", "38", "38 2/3", "39 1/3", "40", "40 2/3", "41 1/3", "42", "43 1/3", "44", "44 2/3", "45 1/3", "46"], "cartId": ".common-cart", "imgId": "", "onInvalid": function() { message("Du skal vælge en variant: %s."); }, "vat": 0.25 });
        $('.accordion>li>a').click( function() { if ($(this).parent('li').hasClass('selected')) { $(this).parent('li').removeClass('selected'); } else { $(this).parent('li').parent('ul').children('li').removeClass('selected'); $(this).parent('li').addClass('selected'); } return false; });
        if ($(window).width()<600) $('#commodity-show-commodities .list-commodity-image>span>img:first-child').on('click', function() { if ($(this).parent().find('img').length>1) { $(this).remove().parent().find('img').show(); return false; }})
        $("#commodity-show .imagezoom").sumoZoom();
        $('.common-search-open').on('click', function() { $(this).parents('.common-search').find('.common-search-inner').show(); $(this).parents('.common-search').find('.common-search-form-search').focus(); return false; }); $('.common-search-close').on('click', function() { $(this).parents('.common-search').find('.common-search-inner').hide(); return false; }); $('.common-search-inner').on('click', function() { $(this).hide(); return false; }); $('.common-search-inner form').click(function(e) { e.stopPropagation(); });
        updateOversize(); $(window).resize(function() { updateOversize(); });
        $(window.top).sumoPop({ href: 'https://www.dr-adams.dk/dataprotection', click: true, canClose: false });
    });

Из него мне нужно достать json, что-бы собрать все размеры товаров

{ "submitId": "commodity-show-addcart-submit", "params": [['color', 'Farve'], ['size', 'Størrelse']], "items": { "141513": { "params": ["BLACK", "36 2/3"], "availability": "1"}, "141514": { "params": ["BLACK", "37 1/3"], "availability": "1"}, "141515": { "params": ["BLACK", "38"], "availability": "1"}, "141516": { "params": ["BLACK", "38 2/3"], "availability": "1"}, "141517": { "params": ["BLACK", "39 1/3"], "availability": "1"}, "141518": { "params": ["BLACK", "40"], "availability": "1"}, "141519": { "params": ["BLACK", "40 2/3"], "availability": "1"}, "141520": { "params": ["BLACK", "41 1/3"], "availability": "1"}, "141521": { "params": ["BLACK", "42"], "availability": "1"}, "141522": { "params": ["BLACK", "43 1/3"], "availability": "1"}, "141523": { "params": ["BLACK", "44"], "availability": "1"}, "141524": { "params": ["BLACK", "44 2/3"], "availability": "1"}, "141525": { "params": ["BLACK", "45 1/3"], "availability": "1"}, "141526": { "params": ["BLACK", "46"], "availability": "1"} }, "pids": ["141513", "141514", "141515", "141516", "141517", "141518", "141519", "141520", "141521", "141522", "141523", "141524", "141525", "141526"], "sizes": ["36 2/3", "37 1/3", "38", "38 2/3", "39 1/3", "40", "40 2/3", "41 1/3", "42", "43 1/3", "44", "44 2/3", "45 1/3", "46"], "cartId": ".common-cart", "imgId": "", "onInvalid": function() { message("Du skal vælge en variant: %s."); }, "vat": 0.25 }

Как его можно достать?

Ответы

▲ 1

Найдите чем начинается строка и чем заканчивается и обрежьте:

def get_products(script):
    start_string = "itemSelector=$('#commodity-show-form').sumoSelector("
    start_index = script.find(start_string) + len(start_string)
    script = script[start_index:]
    script = script[:script.find('});')] + '}'
    return script

text = """(document).ready(function() {
        $('#commodity-show-images').bxSlider({ mode: 'horizontal', auto: false, controls: true, pager: false, speed: 200 });
        itemSelector=$('#commodity-show-form').sumoSelector({ "submitId": "commodity-show-addcart-submit", "params": [['color', 'Farve'], ['size', 'Størrelse']], "items": { "141513": { "params": ["BLACK", "36 2/3"], "availability": "1"}, "141514": { "params": ["BLACK", "37 1/3"], "availability": "1"}, "141515": { "params": ["BLACK", "38"], "availability": "1"}, "141516": { "params": ["BLACK", "38 2/3"], "availability": "1"}, "141517": { "params": ["BLACK", "39 1/3"], "availability": "1"}, "141518": { "params": ["BLACK", "40"], "availability": "1"}, "141519": { "params": ["BLACK", "40 2/3"], "availability": "1"}, "141520": { "params": ["BLACK", "41 1/3"], "availability": "1"}, "141521": { "params": ["BLACK", "42"], "availability": "1"}, "141522": { "params": ["BLACK", "43 1/3"], "availability": "1"}, "141523": { "params": ["BLACK", "44"], "availability": "1"}, "141524": { "params": ["BLACK", "44 2/3"], "availability": "1"}, "141525": { "params": ["BLACK", "45 1/3"], "availability": "1"}, "141526": { "params": ["BLACK", "46"], "availability": "1"} }, "pids": ["141513", "141514", "141515", "141516", "141517", "141518", "141519", "141520", "141521", "141522", "141523", "141524", "141525", "141526"], "sizes": ["36 2/3", "37 1/3", "38", "38 2/3", "39 1/3", "40", "40 2/3", "41 1/3", "42", "43 1/3", "44", "44 2/3", "45 1/3", "46"], "cartId": ".common-cart", "imgId": "", "onInvalid": function() { message("Du skal vælge en variant: %s."); }, "vat": 0.25 });
        $('.accordion>li>a').click( function() { if ($(this).parent('li').hasClass('selected')) { $(this).parent('li').removeClass('selected'); } else { $(this).parent('li').parent('ul').children('li').removeClass('selected'); $(this).parent('li').addClass('selected'); } return false; });
        if ($(window).width()<600) $('#commodity-show-commodities .list-commodity-image>span>img:first-child').on('click', function() { if ($(this).parent().find('img').length>1) { $(this).remove().parent().find('img').show(); return false; }})
        $("#commodity-show .imagezoom").sumoZoom();
        $('.common-search-open').on('click', function() { $(this).parents('.common-search').find('.common-search-inner').show(); $(this).parents('.common-search').find('.common-search-form-search').focus(); return false; }); $('.common-search-close').on('click', function() { $(this).parents('.common-search').find('.common-search-inner').hide(); return false; }); $('.common-search-inner').on('click', function() { $(this).hide(); return false; }); $('.common-search-inner form').click(function(e) { e.stopPropagation(); });
        updateOversize(); $(window).resize(function() { updateOversize(); });
        $(window.top).sumoPop({ href: 'https://www.dr-adams.dk/dataprotection', click: true, canClose: false });
    });
"""

print(get_products(text))