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...