codecamp

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()​ 应该被调用。


scrapy 2.3 将选择器与正则表达式一起用
scrapy 2.3 使用相对路径
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

scrapy 2.3 链接提取器

scrapy 2.3 统计数据集合

scrapy 2.3 发送电子邮件

scrapy 2.3 蜘蛛合约

scrapy 2.3 如何部署蜘蛛

scrapy 2.3 AutoThrottle扩展

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }