我正在使用diffbot刮擦产品。它可以在大多数站点上正常运行,如果没有,自定义API通常可以让我轻松调整直到正确。但是,有些情况让我感到困惑。

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

足部庇护

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

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

我还可以在<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”加载,并且可以通过//div[@class="s7thumb"][@data-namespace="s7classic"]/@style找到XPATH,然后解析出“ background-url”。

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

最佳答案

在某些情况下,某些元素的特定渲染将被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);
}


这已被应用为修复,价格现在返回。

关于javascript - diffbot为什么看不到这里的价格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49884462/

10-10 00:34