Python中scrapy框架的ltem和scrapy.Request詳解
Item
Item是保存爬取數(shù)據(jù)的容器,它的使用方法和字典類似。不過,相比字典,Item提供了額外的保護(hù)機(jī)制,可以避免拼寫錯(cuò)誤或者定義字段錯(cuò)誤。
創(chuàng)建Item需要繼承scrapy.Item類,并且定義類型為scrapy.Field的字段。在創(chuàng)建項(xiàng)目開始的時(shí)候Item文件是這樣的。
import scrapy class Tutorial1tem(scrapy.Item): #define the fields for your item here 7ike:#參照下面這個(gè)參數(shù)定義你的字段 #name = scrapy.Fie1d() pass
在保存數(shù)據(jù)的時(shí)候可以每次初始化一個(gè)字典等格式,但是最方便,最好的保存方式就是使用Scrapy自帶的ltem數(shù)據(jù)結(jié)構(gòu)了。
我們學(xué)習(xí)了從頁(yè)面中提取數(shù)據(jù)的方法,接下來學(xué)習(xí)如何封裝爬取到的數(shù)據(jù)。應(yīng)該用怎樣的數(shù)據(jù)結(jié)構(gòu)來維護(hù)這些零散的信息字段呢?最容易想到是使用Python字典(dict)。
回顧之前的代碼
class Quotesspider(scrapy.spider): name = 'quotes' a1lowed_domains = ['toscrape.com'] start_ur1s = ['http: //quotes.toscrape.com/'] def parse(self,response): quotes = response.css( '.quote ' ) for quote in quotes : text = quote.css('.text: :text ').get() author = quote.css( '.author : :text ').get() tags = quote.css( '.tag : :text ' ).getall() yield { 'text':text, 'author':author, 'tags ' : tags, }
在該案例中,我們便使用了Python字典存儲(chǔ)一本書的信息,但字典可能有以下缺點(diǎn):
(1)無法一目了然地了解數(shù)據(jù)中包含哪些字段,影響代碼可讀性。
(2缺乏對(duì)字段名字的檢測(cè),容易因程序員的筆誤而出錯(cuò)。
(3)不便于攜帶元數(shù)據(jù)(傳遞給其他組件的信息)。
ltem和Field
Scrapy提供了以下兩個(gè)類,用戶可以使用它們自定義數(shù)據(jù)類(如書籍信息),封裝爬取到的數(shù)據(jù):
1. ltem基類
數(shù)據(jù)結(jié)構(gòu)的基類,在items.py中定義數(shù)據(jù)結(jié)構(gòu)時(shí),需要繼承自該基類。
2. Field類
用來描述自定義數(shù)據(jù)類包含哪些字段(如name、price等)。
自定義一個(gè)數(shù)據(jù)類,只需繼承l(wèi)tem,并創(chuàng)建一系列Field對(duì)象的類屬性即可。
以定義書籍信息quote為例,它包含個(gè)字段,分別為書的名字text、author和tags,代碼如下:
#特殊的字典結(jié)構(gòu)可以在scrapy中傳遞數(shù)據(jù) class TutorialItem(scrapy.Item): #Field字段 #就是類似于產(chǎn)生一個(gè)類似字典格式的數(shù)據(jù)擁有字典的一些屬性 #字段默認(rèn)為空 #我們可以通過實(shí)例化像著鍵賦值但是如果沒有寫這個(gè)鍵就不能賦值但是字典可以 text = scrapy. Field() author = scrapy.Fie1d() tags = scrapy . Fie1d()
ltem支持字典接口,因此Tutorialltem在使用上和Python字典類似。
對(duì)字段進(jìn)行賦值時(shí),Tutorialltem內(nèi)部會(huì)對(duì)字段名進(jìn)行檢測(cè),如果賦值一個(gè)沒有定義的字段,就會(huì)拋出異常(防止因用戶粗心而導(dǎo)致錯(cuò)誤)
scrapy.Request
Request和Response 對(duì)象,用于爬網(wǎng)網(wǎng)站。 Request對(duì)象用來描述一個(gè)HTTP請(qǐng)求,下面是其構(gòu)造器方法的參數(shù)列表:
Request(url,ca11back=None,method='GET', headers=None,body=None, cookies=None,meta=None,encoding='utf-8 ',priority=O, dont_filter=False,errback=None,flags=None,cb_kwargs=None)
- url(字符串) -此請(qǐng)求的URL
- callback (callable)-將以請(qǐng)求的響應(yīng)(一旦下載)作為第一個(gè)參數(shù)調(diào)用的函數(shù)。有關(guān)更多信息,請(qǐng)參見下面的將其他數(shù)據(jù)傳遞給回調(diào)函數(shù)。如果"請(qǐng)求'未指定回調(diào),parse()則將使用"Spider"方法。請(qǐng)注意,如果在處理過程中引發(fā)異常,則會(huì)調(diào)用errback.
- method(字符串)-此請(qǐng)求的HTTP方法。默認(rèn)為‘GET'。
- meta (dict) - Request.meta屬性的初始值。如果給出,則在此參數(shù)中傳遞的字典將被淺表復(fù)制。
- headers (dict)-請(qǐng)求頭。dict值可以是字符串(對(duì)于單值標(biāo)頭)或列表(對(duì)于多值標(biāo)頭)。如果None作為值傳遞,則將根本不發(fā)送HTTP標(biāo)頭。
c1ass Quotesspider(scrapy.spider): name = 'quotes_3' allowed_domains = ['toscrape.com'] start__ur1s = ['http://quotes.toscrape.com/'] def parse(self,response): quotes = response.css( '.quote ' ) for quote in quotes: text = quote.css( '.text: :text ' ).get() author = quote.css( '.author : :text ' ).get() tags = quote.css( '.tag : :text ' ). geta11() yield Qd01QuotesItem(text=text,author=author,tags=tags) next_page = response.css( '.next a: :attr(href) ' ).get() if next_page: next__ur1 = 'http: //quotes.toscrape.com' + next_page yield scrapy. Request(next_url, cal7back=self.parse)
到此這篇關(guān)于Python中scrapy框架的ltem和scrapy.Request詳解的文章就介紹到這了,更多相關(guān)scrapy框架的ltem、scrapy.Request內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在IntelliJ IDEA 搭建springmvc項(xiàng)目配置debug的教程詳解
這篇文章主要介紹了在IntelliJ IDEA 搭建springmvc項(xiàng)目配置debug的教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Java中正則表達(dá)式split()特殊符號(hào)使用詳解
這篇文章主要介紹了Java中正則表達(dá)式split()特殊符號(hào)使用詳解, 文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07如何在Java中使用標(biāo)準(zhǔn)庫(kù)創(chuàng)建臨時(shí)文件
有時(shí)候我們程序運(yùn)行時(shí)需要產(chǎn)生中間文件,但是這些文件只是臨時(shí)用途,并不做長(zhǎng)久保存,我們可以使用臨時(shí)文件,不需要長(zhǎng)久保存,這篇文章主要給大家介紹了關(guān)于如何在Java中使用標(biāo)準(zhǔn)庫(kù)創(chuàng)建臨時(shí)文件的相關(guān)資料,需要的朋友可以參考下2023-10-10淺析final,finally,finalize 的區(qū)別
以下是對(duì)final,finally,finalize的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-09-09Kafka是什么及如何使用SpringBoot對(duì)接Kafka(最新推薦)
這篇文章主要介紹了Kafka是什么,以及如何使用SpringBoot對(duì)接Kafka,今天我們通過一個(gè)Demo講解了在SpringBoot中如何對(duì)接Kafka,也介紹了下關(guān)鍵類?KafkaTemplate,需要的朋友可以參考下2023-11-11CentOS?7.9服務(wù)器Java部署環(huán)境配置的過程詳解
這篇文章主要介紹了CentOS?7.9服務(wù)器Java部署環(huán)境配置,主要包括ftp服務(wù)器搭建過程、jdk安裝方法以及mysql安裝過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07