【问题标题】:Remove JSON comments scrapy删除 JSON 评论
【发布时间】:2021-05-01 01:49:14
【问题描述】:

我试图进入页面的字段是:

<script data-test-gtm-script>
// Fill GtmDataLayer with data
gtmDataLayer = window.gtmDataLayer || [];
gtmDataLayer.push({
        'userId' : '5a96c0b1-1caf-4fb3-8272-c94a1796f6ec',
        'isAnonymous' : 'true',
        'language' : 'nl',
        'seriousness' : '0|false',
        'pagetype' : 'object',
        'allowPersonalisatie' : 'true',
        'allowAdvertenties' : 'true',
        'allowAnalytisch' : 'true',
        'allowFunctioneel' : 'true',
        'explicitAcceptOfCookies' : 'true',
        'makelaarVestigingnummer' : '62303',
        'makelaarsvereniging' : 'Vbo',
        'brochure' : 'True',
        'foto360' : 'False',
        'plattegrond' : 'True',
        'toppositie' : 'False',
        'video' : 'True',
        'promolabel' : 'False',
        'inbeeld' : 'False',
        'veiling' : 'False',
        'veilingproduct' : 'False',
        'openhuizendagpromotiepakket' : 'False',
        'soortaanbod' : 'koop',
        'objectType' : 'Woonhuis',
        'soortObject' : 'Eengezinswoning | hoekwoning',
        'aangebodensinds' : 'Vandaag',
        'koopprijs' : '300000',
        'aantalfotos' : '35',
        'globalId' : '5827539',
        'soortPlaatsing' : 'Basis',
        'plaats' : 'Enschede',
        'postcode' : '7534MN',
        'provincie' : 'Overijssel',
        'flex' : 'False',
        'functie_context' : 'koop',
});

// Initialize Google Tag Manager
(function (w, d, s, l, i) {
    w[l] = w[l] || []; w[l].push({
        'gtm.start':
            new Date().getTime(), event: 'gtm.js'
    }); var f = d.getElementsByTagName(s)[0],
        j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
        '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'gtmDataLayer', 'GTM-NPB6HG');

问题是由于 cmets,我无法将其转换为 JSON。如何正确获取值?我需要的具体值为aangebodensinds

我尝试过的:

items = response.xpath("//script[contains(., 'aangebodensinds')]/text()").get().replace('\r\n','').strip()

但是当我尝试将其转换为 JSON 时,它会因错误而失败。

【问题讨论】:

标签: python json scrapy


【解决方案1】:

您正确获取的脚本标签的内容,items 包含标签内的整个 JS 代码。

所以现在你只需要从 js 代码中提取一个对象,你可以像这样使用正则表达式:

items = response.xpath("//script[contains(., 'aangebodensinds')]/text()").\
    re(r'gtmDataLayer\.push\(({[^}]*})')[0]

现在items 将包含可解析的 JSON 字符串。

这是使用js2xml 的替代答案,我认为Scrapy parse javascript 也是一个很好的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2013-07-20
    • 2010-12-12
    • 2015-01-04
    • 2023-03-24
    • 2012-03-09
    • 2020-07-12
    相关资源
    最近更新 更多