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'[\t\r\n\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中获得的是存放在列表中,而传入绑定函数中是按顺序一个一个分别传入处理函数进行处理

 

posted @ 2017-07-26 07:45  梦_鱼  阅读(1031)  评论(0编辑  收藏  举报