为什么diffbot不会在这里看到价格?

时间:2018-04-17 17:48:03

标签: javascript python diffbot

我正在使用diffbot刮擦产品。它在大多数网站上都是正确的,如果不是,自定义API通常允许我轻松调整直到正确。然而,有一些案例令我感到困惑。

我知道diffbot不会在自定义API预览窗口中执行javascript,但对于product端点,它会在向API发出请求时should always execute it(例如,来自diffbot客户端) Python shell)。

足部庇护

对于本网站上的产品,例如https://www.footasylum.com/hugo-boss-three-pack-tshirt-103678/offerPrice字段为空。我可以看到价格在div#priceFrm,所以我尝试编辑并在该字段上添加自定义选择器。但是,即使从Python shell进行新的API调用,响应也是'offerPrice': ''

这个价格显然是由Javascript添加的,但为什么不能不同意处理呢?我该怎么办呢?

我还可以看到我想要的价格可以在<script>内的一些JSON数据中找到。通常情况下,我可以从那里抓取它,//script[contains(text(), "dataLayer")]/text()后跟正则表达式。但是在另一个diffbot自定义字段中,我定义了一个选择器script:contains(dataLayer),即使这是空白的。

有关使用diffbot从此产品中获取价格的任何想法吗?

耐克

我也试图从https://www.nike.com/gb/t/flyknit-trainer-shoe-GBXjsV/AH8396-600

获得价格

第一个问题是自定义API的预览窗口只是奇怪地给出了500错误。

接下来,我使用offerPrice的自定义选择器编辑div[data-test=product-price]字段,但是这个字段没有任何内容 - 即使在Python shell中从客户端调用时也是如此。

手提箱

最后在这个网站上https://www.footlocker.co.uk/en/p/jordan-1-flight-2-men-shoes-6671?v=314100340604#!searchCategory=all diffbot似乎无法获得产品图片。

图像由“scene7”加载,XPATH可以在//div[@class="s7thumb"][@data-namespace="s7classic"]/@style找到,然后解析出“background-url”。

我尝试使用选择器div.s7thumb div[data-namespace=s7classic]至少使用diffbot获取style属性,然后添加属性过滤器“style”,但同样没有返回任何内容。

1 个答案:

答案 0 :(得分:1)

在某些情况下,某些元素的特定渲染将被Diffbot的渲染器或目标站点的反块测量阻止。这就是为什么Diffbot具有X-eval功能,允许您将自定义JavaScript添加到将在目标站点上执行的调用,就像从控制台运行一样。在这种情况下,类似下面的内容会有所帮助:

function() {
    start();
    setTimeout(function() {
        price = document.querySelector("[itemprop="
            Offers "] [itemprop="
            price "]");
        currency = document.querySelector("[itemprop="
            Offers "] [itemprop="
            priceCurrency "]").getAttribute("content");
        price.parentElement.setAttribute("style", "");
        price.parentElement.innerHTML += '<h1 class="thePrice">' + price.innerText + " " + currency + '</h1>';
        setTimeout(function() {
            end();
        }, 500);
    }, 500);
}

这已作为修复程序应用,现在价格会恢复。

相关问题