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

 

转载于:https://www.cnblogs.com/2bjiujiu/p/7237446.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值