我正在学习scrapy,并且正在玩它的shell。作为一个简单的练习,我想从这个网站中提取可见的房间图像: https://www.gumtree.com/flats-houses/london。 烧掉外壳后:
scrapy shell "https://www.gumtree.com/flats-houses/london"
我正在使用以下简单命令来执行此任务:
response.xpath("//div[@class='listing-side']/div[@class='listing-thumbnail']/img/@src").extract()
但是它返回一个30个元素的列表,其中25个值是空字符串。首先我认为我的xpath一定有问题,所以我用铬工具测试它,我必须说它像一个魅力返回一个完整的图像网址列表。一切都如预期的那样。但为什么scrapy不会这样做呢?
编辑:
哦对不起,实际上在这个站点的情况下,要启动shell,必须发出以下命令:
shell -s USER_AGENT="Mozila/5.0" "https://www.gumtree.com/flats-houses/london"
换句话说,必须指定用户代理。
答案 0 :(得分:2)
尝试这样做:
listings = response.xpath("//div[@class='listing-thumbnail']")
images = [listing.xpath('.//img/@src').extract()[1] for listing in listings]
'images'是包含所有列表图片的列表。
答案 1 :(得分:1)
没办法。有一个解决方案给你。你期望的方式。试试这个:
for item in response.xpath("//img[@itemprop='image'][not(@aria-hidden)]/@src").extract():
print(item)
使用css选择器:
for item in response.css("[itemprop='image']:not([aria-hidden])::attr(src)").extract():
print(item)