【问题标题】:Scrapy / xpath not working - only with cssScrapy / xpath 不起作用 - 仅适用于 css
【发布时间】:2021-11-06 13:23:02
【问题描述】:

我尝试抓取这个网站:https://www.magnatiles.com/products/page/1/

我得到了所有的元素:

products = response.xpath("//ul[@class='products']//ancestor::li") 

不,我尝试查找 scrapy shell 中所有元素的价格 - 起初我尝试过:

>>> for p in products:
...  p.xpath("//span[@class='price']//child::bdi/text()").get()           
... 
'134.99'
'134.99'
'134.99'
'134.99'
'134.99'
'134.99'
'134.99'
'134.99'
'134.99'

虽然我正在使用循环,但我似乎只能获得第一个条目

然后我尝试使用 css-selecting 并成功了:

>>> for p in products:
...  p.css("span.price bdi::text").get()
... 
'134.99'
'49.99'
'39.99'
'39.99'
'39.99'
'129.99'
'24.99'
'49.99'
'119.99'

为什么当我使用 xpath-selector 时这不起作用?

【问题讨论】:

    标签: css xpath scrapy


    【解决方案1】:

    在迭代选择 xpath 后,您必须使用 .// 来获得所需的结果。尝试如下:

    p.xpath(".//span[@class='price']//child::bdi/text()").get() 
    

    【讨论】:

      【解决方案2】:

      如果您想在已定义的 Web 元素上使用 xpath

      那么你可以使用

      for p in products:
          p.xpath(".//span[@class='price']//child::bdi/text()").get()  
      

      【讨论】:

        【解决方案3】:

        这个 xpath 选择器也适用于 Chrome。

        //span[@class="woocommerce-Price-amount amount"]//child::bdi/text()
        

        【讨论】:

          猜你喜欢
          • 2021-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-02
          • 1970-01-01
          • 2020-05-23
          • 2018-07-21
          相关资源
          最近更新 更多