scrapy中Pipeline的使用
程序员文章站
2022-03-03 07:58:41
...
scrapy中Pipeline的使用
Pipeline模块的作用:
- 清理HTML数据
- 验证抓取的数据(检查项目是否包含某些字段)
- 检查重复项(并将其删除)
- 将刮擦的物品存储在数据库中
过滤与存储实例:
将数据修改过滤,之后保存至本地
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
class XiaohuaPipeline(object):
# 爬虫开始执行一次
def open_spider(self, spider):
self.fp = open('joke.txt', mode='w', encoding='utf-8')
# 爬虫关闭时执行一次
def close_spider(self, spider):
self.fp.close()
# 交给优先级低的继续执行
def process_item(self, item, spider):
item['time'] = u'4月'+item['time']
self.fp.write('%s, %s, %s\n' % (item['title'], item['href'], item['time']))
if item['time']=='4月25日':
#返回的结果给下一级,如果没有那么就会报错
return item
根据模块里的提示:请不要忘记配置setting
(数值0~1000,越小优先级越高)
setting里的ITEM_PIPELINES解释:
里面是以字典的形式进行存放
xiaohua:代表爬虫项目名
pipelines:代表模块名
xiaohuaPipeline:代表类名
里面的 点 :代表下一级的意思
去重实例:
from scrapy.exceptions import DropItem
class DuplicatesPipeline(object):
#初始化数据,定义一个空集合,这里需注意集合的特性,无序不重复
def __init__(self):
self.ids_seen = set()
def process_item(self, item, spider):
#判断这个数据是否已经在集合里了,如果在抛出自定义异常,如果不在添加此数据,并返回数据给下一级
if item['time'] in self.ids_seen:
raise DropItem('Duplicate item found: %s'% item)
else:
self.ids_seen.add(item['time'])
return item
上一篇: docker(十二):docker持久化
下一篇: scrapy中cookie的使用
推荐阅读
-
解析php框架codeigniter中如何使用框架的session
-
php中const与define的使用区别 详解_PHP教程
-
如何使用PHP中的字符串函数_php基础
-
在Laravel5.2中,如何直接使用Auth包里的方法进行直接注册用户呢?
-
PHP中可以自动分割查询字符的Parse_str函数使用示例,parse_str示例
-
F盘提示使用驱动器中的光盘之前需要将其格式化要怎样寻回资料
-
Node.js中的process.nextTick使用实例
-
使用Yii框架中遇到的三个相关问题_PHP教程
-
实例详解MySQL中触发器的使用方法
-
sqlserver 存储过程中的top+变量使用分析(downmoon)