我正在尝试抓取网站 ( https://www.johnlewis.com/jaeger-wool-check-knit-shift-dress-navy-check/p3767291 ) 的特定页面以习惯 Scrapy 及其功能。但是,我无法让 Scrapy 查看包含轮播上缩略图的“li”。我的 parse
函数当前如下所示:
def parse(self, response):
for item in response.css('li.thumbnail-slide'):
#The for loop works for li.size-small-item
print("We have a match!")
无论如何,Scrapy 都没有“看到”li。我尝试在 scrapy shell 中查看页面,以检查 Scrapy 是否可以看到图像,并且它们是否显示在响应中(所以我假设 Scrapy 肯定可以看到列表中的列表/图像)。我尝试过替代列表,并且有一个不同的列表可以使用(根据代码中的注释)。 我唯一的想法是轮播可能加载了 JavaScript/AJAX,但我不太确定。我确实知道,如果所选图像从“li.thumbnail-slide”更改为“li.thumbnail-slidethumbnail-slide-active”,列表类将会更改,但是,我在脚本中尝试了以下操作,但无济于事:
- li.缩略图幻灯片
- li.thumbnail-slide-active
- li.thumbnail-slide.thumbnail-slide-active
- li.thumbnail-slide 缩略图-slide-事件
没有任何作用。
有人对我可能做错的事情有任何建议吗?或者建议任何可能有帮助的进一步阅读?
提前致谢!
最佳答案
您的假设是正确的,元素在那里,但不完全在您认为的位置。
为了轻松检查某个元素是否是响应 html 的一部分并且未被 javascript 加载,我通常建议使用 browser plugin to disable javascript .
如果您想要图像,它们仍然是 html 响应的一部分,您可以通过以下方式获取它们:
response.css('li.product-images__item')
主图像单独出现:
response.css('meta[itemprop=image]::attr(content)')
希望对您有帮助。
关于python - Scrapy看不到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53131007/