python - scrapy - 项目加载器 - 默认处理器

标签 python scrapy

我是 python 和 scrapy 的新手,所以我提前为可能愚蠢的问题道歉。我在使用默认项目加载器的处理器和相关问题时遇到了一些麻烦:

  1. 我使用 default_input_processor 变量来使用 TakeFirst() 处理器从列表中提取第一个值:

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

    和用法:

      def load_row_data(self, row):
          cl = CaseLoader(CaseItem(), row)
    
          cl.add_xpath('case_num',  './/td[1]/a/text()')
          cl.add_xpath('case_link', './/td[1]/a/@href')
          cl.add_xpath('name',      './/td[3]/text()')
          return cl.load_item()
    

    然后我从回调方法中产生这个项目,但是 TakeFirst() 不起作用,我得到一个列表而不是字符串。如果我将 TakeFist() 用作 default_output_processor,它就可以工作。 default_input_processor 是如何工作的?为什么在这种情况下没有应用 TakeFisrt() 处理器?

  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() 的 Item Loader 中使用它时,出现错误:

    NameError: name 'unicode' is not defined
    

    如果我理解正确,此方法应该删除字符串开头和结尾的空格。如何正确使用?我是否需要编写代码并改为使用我的 strip 函数?

最佳答案

那是因为文档用的是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

关于python - scrapy - 项目加载器 - 默认处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619150/

相关文章:

python - 无法使用 Scrapy 跟踪链接

python - 累积递归

python - 从主页中提取的新页面中提取文本

python - 安装 ScrapyJS - python 新手

python - IPython 赋值魔术打印变量

web-scraping - Scrapy:无法通过登录抓取页面

当 python 脚本作为 systemd 服务运行时,Python Popen 无法识别 scrapy

java - 跨平台卓悦

python - 在 .csv 文件中多次使用 next()

python - 格式化没有 e 或 E 的指数