使用 ItemLoader 但在 Scrapy 中添加 XPath、值等

Using ItemLoader but adding XPath, values etc. in Scrapy

目前我正在使用 XPathItemLoader 来抓取数据:

def parse_product(self, response):
    items = []
    l = XPathItemLoader(item=MyItem(), response=response)
    l.default_input_processor = MapCompose(lambda v: v.split(), replace_escape_chars)
    l.default_output_processor = Join()
    l.add_xpath('name', 'div[2]/header/h1/text()')
    items.append(l.load_item())
    return items

并且需要 v.split() 来去除一些空格 - 效果很好。

但是我现在怎么添加时间呢?

l.add_value('time', time())

只会导致错误:

exceptions.AttributeError: 'float' object has no attribute 'split'

这是因为您正在设置默认输入和输出处理器,它适用于所有项目字段,包括 time,它是 float

您有多种选择:

  • 而不是默认处理器,使用特定于字段的处理器:

    l.name_in = MapCompose(lambda v: v.split(), replace_escape_chars)
    l.name_out = Join()
    
  • convert/format时间转换成字符串:

    l.add_value('time', str(time()))
    
  • 保留默认处理器并配置 Identity 输入和输出处理器:

    l.time_in = Identity()
    l.time_out = Identity()