【问题标题】:Scrapy splash not returning resultsScrapy splash不返回结果
【发布时间】:2017-10-19 22:33:45
【问题描述】:

我正在学习 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',}})

请您帮忙弄清楚为什么网站的价格没有返回?

谢谢!

【问题讨论】:

  • 要检查是因为你的代码还是配置,你可以从splash中截取页面结果并检查它,或者如果有价格就检查文档树。
  • 哦,刚刚看了你的代码,看来你的xpath是错误的。

标签: javascript python scrapy scrapy-splash


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Xpath @class= 谓词不适用于多个类(由空格分隔的类),例如您在其中的类。要获取元素,您应该使用 contains()

    【讨论】:

    • 我也尝试使用您指定的 xpath,但没有成功。还有其他可能出错的地方吗? //*[contains(concat( " ", @class, " " ), concat( " ", "_product-price", " " ))]//span/text()
    猜你喜欢
    • 2019-05-31
    • 2019-06-26
    • 2017-05-27
    • 2015-07-13
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多