0

我正在使用 diffbot 来抓取产品。它在大多数网站上都能正确处理,如果不是,自定义 API 通常允许我轻松调整直到正确。然而,有几个案例让我感到困惑。

我知道 diffbot 不会在自定义 API 预览窗口中执行 javascript,但对于product端点,它应该始终在向 API 发出请求时执行它(例如,从 Python shell 中的 diffbot 客户端)。

足部庇护

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

这个价格显然是 Javascript 加的,但为什么 diffbot 不能处理呢?我能做些什么呢?

我还可以看到我想要的价格可以在<script>. 通常我可以从那里刮掉它,//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”。

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

4

1 回答 1

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);
}

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

于 2018-04-19T05:45:11.117 回答