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中获得的是存放在列表中,而传入绑定函数中是按顺序一个一个分别传入处理函数进行处理
scrapy_对传到items的值预处理的更多相关文章
- C#多线程函数如何传参数和返回值
详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统. C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...
- angular-ui-select (系列二)远程搜索,页面方框显示的值跟传给后台的值不一样解决方案
三:下拉单选远程搜索: 一个重点是: 这个方法,就是让我们去远程搜索的 refresh="ctrl.refreshAddresses($select.search)" refres ...
- mvc后台传到前台的值带html标签css(解决方法)
mvc后台传到前台的值带html标签css MVC中要用:@Html.Raw(后台数据库取的值); 或者MvcHtmlString.create();
- arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值
环境及代码介绍 环境和源码 由于有时候要透彻的理解C里面的一些细节问题,所有有必要看看汇编,首先这一切的开始就是从汇编代码进入C的main函数过程.这里不使用编译器自动生成的这部分汇编代码,因为编译器 ...
- web api post传一个参数时 值永远是null
这个问题纠结了我一个早上,不管用什么样的传参方法,走到控制器中,那个参数永远不变的等于null 在网上找了很多解决方案 上面这个是从网上截图的,第一:要将参数标记为[FromBody],变为简单参数 ...
- [iOS 多线程 & 网络 - 2.6] - 使用POST上传JSON数据 & 多值参数
A.上传JSON 1.思路: 必须使用POST方法才能上传大量JSON数据 设置请求头:设置Content-Type 设置请求体,JSON实际相当于字典,可以用NSDictionary NSJSONS ...
- ajaxFileUpload上传带参数,返回值改成json格式
/*直接复制在自己的js文件中就能使用*/ jQuery.extend({ createUploadIframe: function (id, uri) { //create frame var fr ...
- php $_FILES上传失败 error返回值说明
用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常. $_FILES[fiel ...
- 记录 vant Picker 选择器,实现三级联动,传对应省市区code值
最近使用vant UI写移动端,感觉还不错 功能挺全的,带的还有省市区三级联动. 但是 突然遇到一个 产品要传的 省市区的code码,还和vant的 邮编不一样,我*****. 看了一下vant UI ...
随机推荐
- Tsung测试Tcp协议的应用或接口
利用Tsung模拟基于Tcp的业务流程,实属无奈.因ConnectManager部署在linux下,其中,Loadrunner的winsocket因不支持linux platform而无法使用,而Jm ...
- git使用过程中遇到的问题及处理方法
1. Your local changes to the following files would be overwritten by checkout:......Please commit yo ...
- mysql之数据操作
一 介绍 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现 ...
- 汇编转移指令jmp原理
在计算机中存储的都是二进制数,计算机将内存中的某些数当做代码,某些数当做数据.在根本上,将cs,ip寄存器所指向的内存当做代码,指令转移就是修改cs,ip寄存器的指向,汇编中提供了一种修改它们的指令- ...
- SLAM入门之视觉里程计(5):单应矩阵
在之前的博文OpenCV,计算两幅图像的单应矩阵,介绍调用OpenCV中的函数,通过4对对应的点的坐标计算两个图像之间单应矩阵\(H\),然后调用射影变换函数,将一幅图像变换到另一幅图像的视角中.当时 ...
- Ubuntu下配置ShadowS + Chrome
// 这是一篇导入进来的旧博客,可能有时效性问题. 题目和全文中的ShadowS指代以ShadowS开头名字的某工具,以预防文章被和谐.本机Ubuntu 14.04 LTS.在apt-get upda ...
- MATLAB R2017a 安装与破解
第一步: 到我的百度网盘下载MatlAB2017a的原安装程序和破解补丁: 链接:https://pan.baidu.com/s/1jJz97DW 提取密码: d59m 第二步: 下载的两个iso文件 ...
- 北京师范大学校赛C
https://www.nowcoder.com/acm/contest/submit/0dff89ad7b8444719df155d507f3e1dd?ACMContestId=3&tagI ...
- 一些有用的stl知识《acm程序设计》
accepted 通过 Presentation Error 输出格式错误 Wrong Answer 答案错误 Runtime Error 多为数组访问越界 程序运行时 ...
- QT 操作 excel 教程
前言:环境 win7 64位,QT4.8.5,QT Creator 在 .pro 文件中加入语句"CONFIG+=qaxcontainer"; 源码如下: //main.cpp # ...