我正在使用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/