我正在学习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',}})
请帮助弄清楚为什么网站的价格不会退回?
谢谢!
答案 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()