首页 > 解决方案 > 怎么刮

  • 属于特定类的元素
  • 问题描述

    我正在尝试抓取 amazon(in) 网站。这是我所指的产品页面的链接。

    我正在尝试抓取 ul > li 中存在的图像的 url,并在页面左上角的 span 标签中进一步向下。

    我需要的最终结果是所有图像缩略图的列表,但不是视频缩略图

    以下命令可以正常工作,并为我提供所有缩略图的所有 url

    response.xpath('*//div[@id="altImages"]/ul/li/span[@class="a-list-item"]/span/span/span/span/img/@src').extract()
    

    上述命令的问题是我无法区分图像属于视频缩略图还是图像缩略图。

    为此,我使用以下命令来获取属于图像的缩略图:

    response.xpath('*//div[@id="altImages"]/ul/li[contains(@class,"imageThumbnail")]/span[@class="a-list-item"]/span/span/span/span/img/@src').extract()
    
    ``````````
    and
    
    ``````````
    response.xpath('*//div[@id="altImages"]/ul/li[@class="a-spacing-small item imageThumbnail a-declarative"]/span[@class="a-list-item"]/span/span/span/span/img/@src').extract()
    

    class="a-spacing-small item imageThumbnail a-declarative" 应该只给我那些具有类 'imageThumbnail' 的元素。但我得到的是一个空列表

    我在输出中所期望的只是属于“imageThumbnail”类的图像的 url,在我们的示例中应该只有 5 个

    这是我得到的输出链接:https ://imgur.com/a5wsZh1

    标签: pythonscrapy

    解决方案


    我建议你CSS在这里使用选择器,特别是因为你正在处理类。要选择您可以使用的所有非视频缩略图:

    response.css('#altImages li.item:not(.videoBlockIngress) img::attr(src)').getall() 
    

    或者,如果只想获得视频拇指:

    response.css('#altImages .videoBlockIngress img::attr(src)').getall()
    

    有关 Parsel 选择器的更多信息


    推荐阅读