如何抓取属于特定类的<li>元素

时间:2019-04-03 13:19:05

标签: python scrapy

我正在尝试抓取亚马逊网站。这是我所指的产品页面的link

我正在尝试抓取ul> li内部以及位于页面顶部左上的span标签内部的图像的网址。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

More info on Parsel selectors