报废项目加载器默认处理器

2024-10-06 10:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python和scrapy的新手,所以我提前为一些愚蠢的问题道歉。我对默认项目加载器的处理器有一些问题,以及相关问题:

  1. 我使用默认的\u input_processor变量使用TakeFirst()处理器从列表中提取第一个值,如下所示:

    class    CaseLoader(scrapy.loader.ItemLoader):
        default_input_processor = TakeFirst()
    

    和用法:

    ^{pr2}$

    然后我从回调方法中得到这个项,但是TakeFirst()不起作用,我得到一个列表而不是字符串。如果我使用TakeFist()作为默认的输出处理器,它可以工作。默认的“输入”处理器如何工作?为什么在这种情况下不应用takefirst()处理器?

  2. documentation中,我看到了unicode.strip方法:

    from scrapy.loader import ItemLoader
    from scrapy.loader.processors import TakeFirst, MapCompose, Join
    
    class ProductLoader(ItemLoader):
    
        default_output_processor = TakeFirst()
    
        name_in = MapCompose(unicode.title)
        name_out = Join()
    
        rice_in = MapCompose(unicode.strip)
    
        # ...
    

    但当我试图在Compose()中的项目加载器中使用它时,我得到了错误:

    NameError: name 'unicode' is not defined
    

    如果我理解正确,这个方法应该删除字符串开头和结尾的空格。如何正确使用它?我需要编码并使用strip函数吗?


Tags: 项目方法name列表inputunicodeloader处理器
1条回答
网友
1楼 · 发布于 2024-10-06 10:24:17

这是因为文档使用的是Python2,而您使用的是Python3

Python3中没有unicode。您应该改为使用str

class ProductLoader(ItemLoader):

    default_output_processor = TakeFirst()

    name_in = MapCompose(str.title)
    name_out = Join()

    rice_in = MapCompose(str.strip)

更多信息请参见下面的线程

NameError: global name 'unicode' is not defined - in Python 3

相关问题 更多 >