scrapy 2.3 extract()和extract_first()

2021-06-09 10:07 更新

如果你是一個(gè)長(zhǎng)期的用戶(hù),你可能熟悉 ?.extract()? 和 ?.extract_first()? 選擇器方法。許多博客文章和教程也在使用它們。這些方法仍然由Scrapy支持,有 沒(méi)有計(jì)劃 去貶低他們。

但是,現(xiàn)在使用 ?.get()? 和? .getall()? 方法。我們認(rèn)為這些新方法會(huì)產(chǎn)生更簡(jiǎn)潔和可讀的代碼。

下面的例子展示了這些方法如何相互映射。

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()? ,返回一個(gè)列表:

>>> response.css('a::attr(href)')[0].getall() ['image1.html']

所以,主要的區(qū)別在于 ?.get()? 和 ?.getall()? 方法更容易預(yù)測(cè): ?.get()? 總是返回單個(gè)結(jié)果, ?.getall()? 始終返回所有提取結(jié)果的列表。用 ?.extract()? 方法:結(jié)果是否為列表并不總是顯而易見(jiàn)的;或者得到一個(gè)單獨(dú)的結(jié)果 ?.extract()? 或 ?.extract_first()? 應(yīng)該被調(diào)用。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)