scrapy 2.3 extract()和extract_first()
如果你是一个长期的用户,你可能熟悉 .extract() 和 .extract_first() 选择器方法。许多博客文章和教程也在使用它们。这些方法仍然由Scrapy支持,有 没有计划 去贬低他们。
但是,现在使用 .get() 和 .getall() 方法。我们认为这些新方法会产生更简洁和可读的代码。
下面的例子展示了这些方法如何相互映射。
1、SelectorList.get() 是一样的 SelectorList.extract_first() :
>> response.css('a::attr(href)').get() 'image1.html'
>>> response.css('a::attr(href)').extract_first() 'image1.html'
2、SelectorList.getall() 是一样的 SelectorList.extract() :
>>> response.css('a::attr(href)').getall() ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']
>>> response.css('a::attr(href)').extract() ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']
3、Selector.get() 是一样的 Selector.extract() :
>>> response.css('a::attr(href)')[0].get() 'image1.html'
>>> response.css('a::attr(href)')[0].extract() 'image1.html'
4、为了保持一致性,还有 Selector.getall() ,返回一个列表:
>>> response.css('a::attr(href)')[0].getall() ['image1.html']
所以,主要的区别在于 .get() 和 .getall() 方法更容易预测: .get() 总是返回单个结果, .getall() 始终返回所有提取结果的列表。用 .extract() 方法:结果是否为列表并不总是显而易见的;或者得到一个单独的结果 .extract() 或 .extract_first() 应该被调用。