如何在scrapy中使用add_xpath检查不合适的值并将项目值设置为默认值?

时间:2016-06-15 21:22:24

标签: python scrapy

假设我有这段代码:

def parse(self, response)
    l = ItemLoader(item=MyItem(), response=response
    l.add_xpath('title', '//*[@id="title"]/text()', MapCompose(str.strip, str.title)
    l.add_xpath('price', '//*[@id="price"]/text()', MapCompose(lambda i: i.replace(',', ''), float), re = '[,.0-9]')

    return l.load_item()

我想检查是否找不到元素,在这种情况下设置一个默认值为l.add_value,例如(我试过这样做):

    if l.add_xpath('price', '//*[@id="price"]/text()', MapCompose(lambda i: i.replace(',', ''), float), re = '[,.0-9]'):
        l.add_value('available', 1)
    else:
        l.add_value('price', 0)
        l.add_value('available', 0)

但我得到了奇怪的结果(see discussion here) 有任何想法可以实现吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

ItemLoader的来源是hereadd_xpath方法不会返回任何内容(默认情况下会返回None,因此您的if语句将始终为False)。

似乎有get_xpath方法似乎可以执行您想要的操作(检查元素是否存在)。