Scrapy Compose(custom_func)没有收到初始值?

时间:2018-07-13 07:30:26

标签: python scrapy scrapy-spider scrapy-pipeline

tl; dr

这有效:

text_in = clean_list
$ ['','text','', 'text2'] <--- example output

这不是:

text_in = Compose(clean_list, stop_on_none=False)
$ TypeError: clean_list() missing 1 required positional argument: 'values'

文档:

  

class scrapy.loader.processors.Compose(*functions, **default_loader_context)

     

根据给定的组成构造的处理器   功能。这意味着该处理器的每个输入值为   传递给第一个函数,该函数的结果是   传递给第二个函数,依此类推,直到最后一个函数   返回此处理器的输出值。   默认情况下,停止对None值的处理。可以通过传递关键字参数stop_on_none=False来更改此行为。

出了什么问题?最初的论点消失在哪里?


useritems.py

def not_empty(self, values):
    return values if values else None

def clean_list(self, values):
    return x.something() if not_empty(values) else None

class UserItem(scrapy.loader.Item):
    text = scrapy.Field()

class UserLoader(scrapy.loader.ItemLoader):
    default_input_processor = clean_list
    text_in = Compose(clean_list)

__ init __。py

class UserSpider(scrapy.Spider):
     #init settings
     def parse(self, response):
         results = response.xpath(xpath1)
         for result in results.css("li"):
              loader = UserLoader(item=UserItem(), selector=result)
              nest = loader.nested_xpath(xpath2)
              nest.add_xpath("text", xpath3)     # eg = ['','text','', 'text2']
              yield loader.load_item()

0 个答案:

没有答案