scrapy和chromium工具不会返回相同的值

时间:2017-09-24 12:56:35

标签: python web-scraping scrapy

我正在学习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"

换句话说,必须指定用户代理。

2 个答案:

答案 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)