【问题标题】:Why doesn't diffbot see the price here?为什么 diffbot 看不到这里的价格?
【发布时间】:2018-04-17 17:48:03
【问题描述】:

我正在使用 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错误。

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

储物柜

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

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

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

【问题讨论】:

    标签: javascript python diffbot


    【解决方案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);
    }
    

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

    【讨论】:

    • Footasylum 目标的价格现在可以开箱即用,但 Nike 的价格似乎仍然缺失,Footlocker 的图像仍然缺失。
    • 对于X-Eval 示例,这用于 3 中的哪个目标?还是只是一个说明性的例子?
    • 请注意,Nike 的网页预览仍然是 500s,因此很难编辑任何内容。认为这需要修复。
    • Nike 具有 iframe 保护功能,因此可能永远无法在预览中呈现,很遗憾。如果一个网站想要阻止爬虫,他们可以。对此没有什么可做的。但 diffbot 的新渲染器应该会在未来几个月内显着改进,敬请期待。
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2018-05-10
    相关资源
    最近更新 更多