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

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

scrapy_对传到items的值预处理的更多相关文章

  1. C#多线程函数如何传参数和返回值

          详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统.   C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...

  2. angular-ui-select (系列二)远程搜索,页面方框显示的值跟传给后台的值不一样解决方案

    三:下拉单选远程搜索: 一个重点是: 这个方法,就是让我们去远程搜索的 refresh="ctrl.refreshAddresses($select.search)" refres ...

  3. mvc后台传到前台的值带html标签css(解决方法)

    mvc后台传到前台的值带html标签css MVC中要用:@Html.Raw(后台数据库取的值); 或者MvcHtmlString.create();

  4. arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值

    环境及代码介绍 环境和源码 由于有时候要透彻的理解C里面的一些细节问题,所有有必要看看汇编,首先这一切的开始就是从汇编代码进入C的main函数过程.这里不使用编译器自动生成的这部分汇编代码,因为编译器 ...

  5. web api post传一个参数时 值永远是null

    这个问题纠结了我一个早上,不管用什么样的传参方法,走到控制器中,那个参数永远不变的等于null 在网上找了很多解决方案 上面这个是从网上截图的,第一:要将参数标记为[FromBody],变为简单参数 ...

  6. [iOS 多线程 & 网络 - 2.6] - 使用POST上传JSON数据 & 多值参数

    A.上传JSON 1.思路: 必须使用POST方法才能上传大量JSON数据 设置请求头:设置Content-Type 设置请求体,JSON实际相当于字典,可以用NSDictionary NSJSONS ...

  7. ajaxFileUpload上传带参数,返回值改成json格式

    /*直接复制在自己的js文件中就能使用*/ jQuery.extend({ createUploadIframe: function (id, uri) { //create frame var fr ...

  8. php $_FILES上传失败 error返回值说明

    用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常. $_FILES[fiel ...

  9. 记录 vant Picker 选择器,实现三级联动,传对应省市区code值

    最近使用vant UI写移动端,感觉还不错 功能挺全的,带的还有省市区三级联动. 但是 突然遇到一个 产品要传的 省市区的code码,还和vant的 邮编不一样,我*****. 看了一下vant UI ...

随机推荐

  1. yield next和yield* next的区别

    yield next和yield* next之间到底有什么区别?为什么需要yield* next?经常会有人提出这个问题.虽然我们在代码中会尽量避免使用yield* next以减少新用户的疑惑,但还是 ...

  2. ASP.NET Core 一步步搭建个人网站(5)_Api模拟和网站分析

    前言 经过前面几章,我们的网站已经最基本的功能,接下来就是继续拓展其他的功能,这期一起来实现一个该网站流量分析的工具,统计出这个网站每天用户相关数据,不仅要满足了我们对流量统计数字的基本要求,并且用更 ...

  3. [笔记]《JavaScript高级程序设计》- 最佳实践

    一.可维护性 1 什么是可维护的代码 可理解性--其他人可以接受代码并理解它的意图和一般途径,而无需原开发人员的完整解释. 直观性--代码中的东西一看就能明白,不管其操作过程多么复杂. 可适应性--代 ...

  4. python3之File文件方法

    1.读写文件 open()将会返回一个file对象,基本语法: open(filename,mode) filename:是一个包含了访问的文件名称的路径字符串 mode:决定了打开文件的模式:只读, ...

  5. 【矩阵快速幂】bzoj1297 [SCOI2009]迷路

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1407  Solved: 1007[Submit][Status ...

  6. Python 抽象篇:面向对象之高阶用法

    1.检查继承 如果想要查看一个类是否是另一个类的子类,可以使用内建的issubclass函数 如果想知道已知类的基类,可以直接使用特殊特性__bases__ 同时,使用isinstance方法检查一个 ...

  7. 微信app支付(android端+java后台)

    本文讲解使用微信支付接口完成在android开发的原生态app中完成微信支付功能, 文章具体讲解了前端android如何集成微信支付功能以及后台如何组装前端需要支付信息, 话不多话, 具体看文章内容吧 ...

  8. Sass和Compass入门

    一.前言 1.Sass是什么? Sass可以简化你的Css工作流,并可以使你的Css的扩展和维护工作变的更加容易!例如,曾几时何,因为客户的需求的变更,你必须不断的通过查找和替换来更改一个像素值,或者 ...

  9. 洛谷 P1219 八皇后【经典DFS,温习搜索】

    P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...

  10. 备份的一些小tip

    // npm官方镜像 npm config set registry=http://registry.npmjs.org // 亚马逊S3 host 219.76.4.4 github-cloud.s ...