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

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

  1. #!/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. __author__ = 'beimenchuixue'
  5. __blog__ = 'http://www.cnblogs.com/2bjiujiu/'
  6.  
  7. import hashlib
  8. import scrapy
  9. import re
  10. from w3lib.html import remove_tags
  11. from scrapy.loader import ItemLoader
  12. from scrapy.loader.processors import TakeFirst, Join, MapCompose
  13. from tools.shared import get_md5, go_remove_tag
  14.  
  15. class AllItemLoader(ItemLoader):
  16. """
  17. 通过自定义itemloader要求都取列表中第一个值
  18. """
  19. default_output_processor = TakeFirst()
  20.  
  21. def get_md5(url):
  22. """对获取的URL进行md5"""
  23. m = hashlib.md5()
  24. m.update(bytes(url, encoding='utf-8'))
  25. return m.hexdigest()
  26.  
  27. # 把对应的内容,去掉标签、空格、空行
  28. def go_remove_tag(value):
  29. content = remove_tags(value)
  30. return re.sub(r'[\t\r\n\s]', '', content)
  31.  
  32. def comeback(value):
  33. """啥也不干,直接返回"""
  34. return value
  35.  
  36. class ENet(scrapy.Item):
  37. article_id = scrapy.Field(
  38. # 进来的值预处理
  39. input_processor=MapCompose(get_md5)
  40. )
  41. article_url = scrapy.Field()
  42. title = scrapy.Field()
  43. content = scrapy.Field(
  44. input_processor=MapCompose(go_remove_tag),
  45. # 从items出去的值进行拼接处理
  46. output_processor=Join('')
  47. )
  48. publish_time = scrapy.Field()
  49. come_form = scrapy.Field(
  50. # 获得结果还是列表
  51. output_processor=MapCompose(comeback)
  52. )

  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. 第四章 go语言 数组、切片和映射

    文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ 数组是由同构的元素组成.结构体是由异构的元素组成.数据和结构体都是有固定内存大小的数 ...

  2. 【RMQ】洛谷P3379 RMQ求LCA

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  3. Windows内核函数

    字符串处理 在驱动中一般使用的是ANSI字符串和宽字节字符串,在驱动中我们仍然可以使用C中提供的字符串操作函数,但是在DDK中不提倡这样做,由于C函数容易导致缓冲区溢出漏洞,针对字符串的操作它提供了一 ...

  4. Spring框架入门之开发环境搭建(MyEclipse2017平台)

    基于MyEclipse2017平台搭建Spring开发环境,这里MyEclipse已将Spring集成好了,我们只需要做一简单配置即可 一.环境配置 OS:Windows7 64位 IDE工具:MyE ...

  5. Coursera课程 Programming Languages, Part C 总结

    碎言碎语 和前面的 ML 和 Racket 感觉明显不一样了,一边学着一边觉得这真是一门奇怪的语言,有着各种奇怪的语法,不过真的算是一个奇妙的体验(相比前面的两门语言,Ruby 的学习资源多了不少). ...

  6. javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

    前言 今天一个朋友让我帮他做一下tomcat的https配置,中间遇到了标题中这个错误,因此记录了一下过程,服务器.域名.证书.tomcat都已经准备好,就是需要配置一下即可,用的是阿里云的证书服务, ...

  7. Messagepack原理

    什么是Messagepack? 用官方的话说:MessagePack是一种高效的二进制序列化格式.它允许您像JSON一样在多个语言之间交换数据.但是,它更快并且更小.小整数被编码为一个字节,和典型的短 ...

  8. go golang 判断base64数据 获取随机字符串 截取字符串

    go golang 判断base64数据 获取随机字符串 截取字符串 先少写点,占个坑,以后接着加. 1,获取指定长度随机字符串 func RandomDigits(length int) strin ...

  9. B. Secret Combination

    B. Secret Combination time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  10. POJ_1064 二分搜索

    /*POJ 1064 *题目大意:有N条绳子,他们的长度分别为Li,如果从他们中切割K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留到小数点后2位 *算法分析:这个问题用二分搜索可以非常容 ...