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

  • 相关阅读:
    rpm命令参数(转载)
    通过KMS服务器激活windows
    icehouse版本中常用操作命令
    openstack环境搭建常用命令
    openstack 重启服务命令
    python连接mysql数据库报错pymysql连接数据库报错TypeError: __init__() takes 1 positional argument but 5 positional arguments
    Linux下LDAP统一认证解决方案
    windows系统添加IP地址黑名单
    网站防止SQL注入
    Windows服务器修改远程端口号的方法
  • 原文地址:https://www.cnblogs.com/shouzhong/p/7773974.html
Copyright © 2011-2022 走看看