scrapy_items
为什么要items?
当数据量多的时候,没有统一的数据管理,统一格式化麻烦
items中除了能添加字段,还能做什么?
1. 进行预先处理
2. 对从items出去的数据进行处理
3. 写上sql语句逻辑
# -*- coding: utf-8 -*- 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)
) def get_sql(self):
"""获得sql语句和对应的sql填充值"""
# 获取sql语句
sql = """insert into
e_news(article_id, article_url, title, content, publish_time)
VALUE
(%s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
article_url=VALUES(article_url), title=VALUES(title), content=VALUES(content), publish_time=VALUES(publish_time)
"""
# 获取sql填充值
parms = (self['article_id'], self['article_url'], self['title'],
self['content'], self['publish_time'])
return sql, parms
注意点:
对于通过itemloda进行解析的值存放在列表中,传递给items时候,会把列表中一个一个值单独按序传入预处理函数进行操作
scrapy_items的更多相关文章
- Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的python类,负责接收到item并通过它执行一些行为, ...
- scrapy爬取西刺网站ip
# scrapy爬取西刺网站ip # -*- coding: utf-8 -*- import scrapy from xici.items import XiciItem class Xicispi ...
- Scrapy爬虫框架第七讲【ITEM PIPELINE用法】
ITEM PIPELINE用法详解: ITEM PIPELINE作用: 清理HTML数据 验证爬取的数据(检查item包含某些字段) 去重(并丢弃)[预防数据去重,真正去重是在url,即请求阶段做] ...
- 爬虫基础(五)-----scrapy框架简介
---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...
- MongoDB 及 scrapy 应用
0 1.Scrapy 使用 MongoDB https://doc.scrapy.org/en/latest/topics/item-pipeline.html#write-items-to-mong ...
- scrapy入门与进阶
Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...
- 5、爬虫系列之scrapy框架
一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能 ...
- python 全栈开发,Day137(爬虫系列之第4章-scrapy框架)
一.scrapy框架简介 1. 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前S ...
- 四: scrapy爬虫框架
5.爬虫系列之scrapy框架 一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架 ...
随机推荐
- adb 获取Android手机信息命令(1)
@set version=1.7.2Normal @echo ============================================================= @echo I ...
- python之 文件读与写
python 进行文件读写的函数是open 或filefile_handler = open(filename,,mode) 模式 描述r 以读方式打开文件,可读取文件信息.w 以写方式打开文件,可向 ...
- 2017 年的 人生 hard 模式终于结束了,2018年回归初心(二)
今天周末, 深圳的天气简直好的不像话.好了,我们继续之前的话题往下聊. >>>猎头 : 关于猎头这个行业,以笔者的感觉来说 一般你工作年限未超过三年的话,你是很难遇到猎头来推送你的简 ...
- CentOS7 添加端口
首先要知道CentOS 7 采用了 firewalld 防火墙,而在linux中其他版本大多是通过编辑iptables的配置文件来修改. 1.添加9000端口 # firewall-cmd --add ...
- Android技术之-------电脑获取手机截图
入吾QQ群183435019(学习 交流+唠嗑) 其实这个相当简单 应该会点ADB命令的人都会吧 一 下载一个ADB 如果你是学Android编程的,,Android SDK应该有吧,在Android ...
- springboot整合mybaits注解开发
springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...
- jQuery_serialize的用法
jQuery_serialize(form表单序列化)用于在前端要传很多值往后端的时候: <!DOCTYPE html> <html lang="en"> ...
- 2017ecjtu-summer training # 11 POJ 2492
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 38280 Accepted: 12452 D ...
- MySQL的ibdata1文件占用过大
处理MySQL的ibdata1文件过大问题 本人遇到一次在安装zabbix监控的时候,yum安装的MySQL数据库,后面用了一段时间发现data目录下的ibdata1的空间特别大,反而我的zabbix ...
- android动画源码合集、动态主题框架、社交app源码等
Android精选源码 仿MIUI果冻视图-BouncingJellyView 一个快速易用的动态主题框架 android动画效果集合源码 android使用Kotlin开发的Dribbb ...