• scrapy_对传到items的值预处理


    如何实现对值进行预处理? 

      对于传递进items的值,首先明白有两个动作,,那就可以分别对这两个动作进行逻辑处理 

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'beimenchuixue'
    __blog__ = 'http://www.cnblogs.com/2bjiujiu/'
    
    import hashlib
    import scrapy
    import re
    from w3lib.html import remove_tags
    from scrapy.loader import ItemLoader
    from scrapy.loader.processors import TakeFirst, Join, MapCompose
    from tools.shared import get_md5, go_remove_tag
    
    
    class AllItemLoader(ItemLoader):
        """
        通过自定义itemloader要求都取列表中第一个值
        """
        default_output_processor = TakeFirst()
    
    
    def get_md5(url):
        """对获取的URL进行md5"""
        m = hashlib.md5()
        m.update(bytes(url, encoding='utf-8'))
        return m.hexdigest()
    
    
    # 把对应的内容,去掉标签、空格、空行
    def go_remove_tag(value):
        content = remove_tags(value)
        return re.sub(r'[	
    s]', '', content)
    
    
    def comeback(value):
        """啥也不干,直接返回"""
        return value
    
    
    class ENet(scrapy.Item):
        article_id = scrapy.Field(
            # 进来的值预处理
            input_processor=MapCompose(get_md5)
        )
        article_url = scrapy.Field()
        title = scrapy.Field()
        content = scrapy.Field(
            input_processor=MapCompose(go_remove_tag),
            # 从items出去的值进行拼接处理
            output_processor=Join('')
        )
        publish_time = scrapy.Field()
        come_form = scrapy.Field(
            # 获得结果还是列表
            output_processor=MapCompose(comeback)
        )
        
    

      input_processor     进 处理

      output_processor     出 处理

      MapCompose        绑定处理函数

      Join                               进行拼接

      TakeFirst         出,取列表第一个值

    items如何把spider中解析到的值进行处理?

      spider中获得的是存放在列表中,而传入绑定函数中是按顺序一个一个分别传入处理函数进行处理

  • 相关阅读:
    http协议
    web应用
    前端基础-jquery
    jQuery的事件
    2.UML类图基本介绍
    1.设计模式的七大原则
    使用OpenFeign远程调用时请求头处理报错问题
    SpringCloud Config-分布式配置中心
    19. 类加载器详解
    18. 类加载过程详解
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/7237446.html
Copyright © 2020-2023  润新知