scrapy中关于ItemLoader的使用

一、ItemLoaderItem的区别

  • ItemLoader是负责数据的收集、处理、填充,item仅仅是承载了数据本身
  • 数据的收集、处理、填充归功于item loader中两个重要组件:
    • 输入处理input processors
    • 输出处理output processors

二、关于ItemLoader的使用

  • 1、创建一个项目并创建一个爬虫
  • 2、在item.py中使用

    import scrapy
    
    from scrapy.loader import ItemLoader
    from scrapy.loader.processors import TakeFirst, MapCompose
    
    # 去除html标签的
    
    from w3lib.html import remove_tags
    
    
    
    # 定义一个默认输出的
    
    class ArticalItemLoader(ItemLoader):
        # 实现之前的extract_first()方法
        # 这里只是重载这个属性,设置为只选取第一个值
        default_output_processor = TakeFirst()
    
    
    
    # 以下将之前的各种清洗语句整合到函数中
    
    def add_title_jobbole(value):
        return value + "---jobbole"
    
    
    
    # 处理时间的
    
    def formate_date(value):
        if value.strip().replace('·', '').strip():
            return value.strip().replace('·', '').strip()
    
    
    
    # 定义去除空格
    
    def str_strip(str):
        return str.strip().replace('\n', '').replace('\t', '').replace('\r', '').replace(' ', '')
    
    
    
    # 定义一个item的
    
    class JobboleArticalItem(scrapy.Item):
        title = scrapy.Field(
            input_processor=MapCompose(add_title_jobbole)
        )
        time = scrapy.Field(
            input_processor=MapCompose(formate_date)
        )
        content = scrapy.Field(
            input_processor=MapCompose(remove_tags, str_strip)
        )
  • 3、在爬虫中使用刚刚定义的

    import scrapy
    
    from itemloader.items import JobboleArticalItem, ArticalItemLoader
    
    
    class JobbleSpider(scrapy.Spider):
        name = 'jobble'
        allowed_domains = ['jobbole.com']
        start_urls = ['http://blog.jobbole.com/113691/']
    
        def parse(self, response):
            item_loader = ArticalItemLoader(item=JobboleArticalItem(), response=response)
            item_loader.add_css('title', '#post-113691 .entry-header h1::text')
            item_loader.add_css('time', '#post-113691 .entry-meta .entry-meta-hide-on-mobile::text')
            item_loader.add_css('content', '#post-113691 .entry')
            article_item = item_loader.load_item()
            yield article_item
  • 4、运行爬虫

    scrapy crawl jobble -o jobble.json

三、常见的内置处理器

  • 1、Identity

    不对数据进行处理,直接返回原来的数据

  • 2、TakeFirst

    返回第一个非空值,常用于单值字段的输出处理

  • 3、Join

    相当于把列表中的元素拼接起来

  • 4、MapCompose把几个方法组合起来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水痕01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值