zoukankan      html  css  js  c++  java
  • 爬虫——使用ItemLoader维护item

    在item的Filed()中设置参数函数,可以用来预处理item字段的数据,另一方面也方便程序代码的管理和重用  

    item中

    from scrapy.loader.processors import MapCompose, TakeFirst
    import scrapy
    from scrapy.loader import ItemLoader

    def add(value):
       # 在MyItem中调用的函数,对输入的数据进行指定的处理后返回值
      return value + 'HELLO-WORLD'

    def fun(value):
       return value + do_something


    class MyItemLoader(ItemLoader):
      # 自定义ItemLoader类,继承自ItemLoader,实现默认提取第一个值,用来自动实现output_process=TakeFirst()
       default_output_processor = TakeFirst()


    class MyItem(scrapy.Item):
      '''
      # input_process=MapCompose(add)可以使用外置函数add对传入的item字段进行预处理
      # MapCompose()里的参数可以是任意函数,例子中add是外置函数,也可以是lambda匿名函数
      # output_process=TakeFirst()
      # TakeFirst()只提取第一个值
      当自定义了ItemLoader,即MyItemLoader类后,output_process就可以省略了
      '''

      item = scrapy.Field(
      input_process=MapCompose(add),
      #output_process=TakeFirst()
      )

    spider中

    from scrapy.loader import ItemLoader
    from spider_path.items import MyItem
    from ... import MyItemLoader # 导入自定义的ItermLoader

    # 通过ItemLoader加载MyItem中的字段, 这里ItemLoader被重写成了MyItermLoader
    item_loader= MyItemLoasder(item=MyItem(), response=response)

    # 通过css,xpath,value提取
    item_loader.add_css('MyItem中的字段','css选择器提取路径')
    item_loader.add_xpath('MyItem中的字段','xpath选择器提取路径')
    item_loader.add_value('MyItem中的字段',获取的值)

    my_item = item_loader.load_item()
    yield my_item

  • 相关阅读:
    JAVA处理Clob大对象
    计院生活第二章 深入虎穴(上)
    我的2008
    Quartz入门到精通
    DOM4J使用教程
    JNI简介及实例
    《JavaScript凌厉开发 Ext详解与实践》3月5日开始上架销售
    计院生活第二章 深入虎穴(下)
    Access转Sql Server问题
    提高网站可用性的10个小技巧
  • 原文地址:https://www.cnblogs.com/shouzhong/p/7773974.html
Copyright © 2011-2022 走看看