阅读(3796) (0)

scrapy 2.3 extract()和extract_first()

2021-06-03 10:54:21 更新

如果你是一个长期的用户,你可能熟悉 ​.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()​ 应该被调用。