Scrapy飞溅不返回结果

时间:2017-10-19 22:33:46

标签: javascript python scrapy scrapy-splash

我正在学习scrapy(使用splash)并构建一个蜘蛛来从js启用的页面中删除结果。我的蜘蛛工作,并返回js页面的结果。但是,它不会从此链接https://www.zara.com/us/en/bejewelled-appliqu%C3%A9-dress-p07854034.html?v1=4818592&v2=733885

返回价格
xpath used: //*[contains(concat( " ", @class, " " ), concat( " ", "_product-price", " " ))]//span/text()

上述xpath确实在浏览器中返回结果,但在通过scrapy调用时不返回结果。这是我的蜘蛛电话

yield scrapy.Request(url, callback=self.parse_page, dont_filter=True, meta={'splash': {'args': {'wait': 5,},'endpoint': 'render.html',}})

请帮助弄清楚为什么网站的价格不会退回?

谢谢!

2 个答案:

答案 0 :(得分:3)

问题是Splash呈现的HTML输出中根本不存在价格(最好看的是将您的URL放在8050端口上的Web浏览器中的Splash控制台中并查看它的渲染输出。如果页面未正确呈现,请从Splash FAQ开始。您将发现在您的情况下,解决方案是针对Splash的disable Private mode,通过Docker的--disable-private-mode启动选项,或者在LUA脚本中设置splash.private_mode_enabled = false。禁用私有模式后,页面呈现正确。

答案 1 :(得分:0)

将此用于您的xpath - //*[contains(concat( " ", @class, " " ), concat( " ", "_product-price", " " ))]//span/text()或简称//*[contains(concat( " ", @class, " " )," _product-price " ))]//span/text()

Xpath @ class =谓词不适用于多个类(按空格分隔的类),就像你在那里一样。要获取元素,您应该使用contains()