Scrapy ItemLoader空值報錯問題

2021-09-26 10:58:42 字數 1770 閱讀 5354

1) 目標**:

2) 問題背景:

在抓取文章的tags時,有些文章有這個資訊,有些文章沒有這個資訊。scrapy-spider在解析的時候使用itemloader機制解析填充資料。但是當遇到頁面沒有這個屬性的文章時,解析為空,itemloader預設不填充,資料物件為none。在向資料庫儲存資料時就會報錯keyerror。

大概思路就是:要麼不用itemloader,要麼就過載mapcompose物件。

修改之前的原始碼:

item_loader.add_xpath(

'tags'

, xpath=

".//a[@class='catalink']/text()"

)

修改之後的原始碼

item_loader.add_xpath(

'tags'

, xpath=

".//a[@class='catalink']/text()"

)item_loader.add_value(

'tags'

,'null'

)

解釋:

可以將add_xpath()函式和add_value()函式配合使用。

經過測試,將add_xpath()函式寫在add_value()之前,那麼如果前者沒有匹配到資料時,就會將add_value()函式中的value值到字段中,測試結果是xpath匹配到的item按照xpath匹配結果填充字段,沒有匹配到xpath的item按照add_value填充了字段。

反過來,如果將add_value()函式寫在add_xpath()之前,則優先匹配add_value()函式,測試結果也是全都變成了add_value()函式中的「null」字串了。

也就是說這樣修改後,**邏輯就變成了,『add_xpath()'匹配到了就填充匹配結果,沒有匹配到,就填充』add_value』中的預設值。

原始碼中的add_xpath():

def

add_xpath

(self, field_name, xpath,

*processors,

**kw)

: values = self._get_xpathvalues(xpath,

**kw)

self.add_value(field_name, values,

*processors,

**kw)

根據原始碼可以看出,add_xpath()函式通過xpath匹配之後也是要呼叫add_value()函式填充資料,所以可以在呼叫add_value()函式填充之前,新增判斷邏輯,先判斷values是否為空,如果values為空就給乙個預設值讓add_value()填充,如果values不為空,就按照values填充。

def

add_xpath

(self, field_name, xpath,

*processors,

**kw)

: values = self._get_xpathvalues(xpath,

**kw)

if values:

self.add_value(field_name, values,

*processors,

**kw)

else

: self.add_value(field_name,

'null'

,*processors,

**kw)

struts ActionForm 空欄位問題

前台 jsp輸出 testactionform tf testactionform request.getattribute testactionform tf.getusername tf.getpassword el表示式輸出 testactionform 為 struts config.xml...

空格 空值 空物件

string s null 空物件是指定義乙個物件s,但是沒有給該物件分配空間,即沒有例項化該物件,因此,空物件在呼叫所有物件方法時候都會丟擲異常,如s.length s.isempty 等方法。string k 空值是指乙個字元床物件已經例項化,即系統已經給該變數分配了空間,只是物件的內容為空。s...

萬用字元 空值

萬用字元主要用於字串的查詢和匹配 匹配乙個字元 select from mytable where name like 張 查詢條件張姓,姓名2個字 匹配多個字元 select from mytable where name like 張 查詢條件 張姓 範圍或轉義 select from myta...