Scrapy爬虫框架(三)Item Pipeline 介绍

 

1、scrapy爬取数据保存到文件

scrapy crawl 项目名 -o  文件名.json

2、保存的文件类型还有很多种

csv,xml,pickle,marshal,ftp远程输出

其他的写法差不多,ftp输出需要配置用户名,密码,地址,输出路径

scrapy crawl 程序名 -o ftp://user:pass@ftp.example.com/path/to/test.csv

3、下面进入到今天的正题:

Item Pipeline 介绍

item Pipeline为项目管道,当Item生成后,它会自动被送到Item Pipeline进行处理,它经常来做

如下操作

1.清理HTMl数据

2.验证爬取得数据,检查爬取的字段

3.查重并丢弃重复的内容

4.将爬取的结果保存到数据库

4、如何实现Item pipeline:

定义process_item()方法,启用ItemPipeline时会自动调用,

process_item()方法必须返回包含数据的字典或是Item对象,或者抛出异常

import pymongo
from scrapy.exceptions import DropItem
​
​
class TextPipeline(object):
    def __init__(self):
        self.limit = 50
​
    def process_item(self, item, spider):
        if item['text']:
            if len(item['text']) > self.limit:
                item['text'] = item['text'][0:self.limit].rstrip() + '...'
            return item
        else:
            return DropItem('Missing Text')
 

代码解析:

对返回的字段text进行处理,只要字符长度大于50的,

同文件下写入代码:

class MongoPipeline(object):
    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db
​
    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DB')
        )
​
    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]
​
    def process_item(self, item, spider):
        name = item.__class__.__name__
        self.db[name].insert(dict(item))
        return item
​
    def close_spider(self, spider):
        self.client.close()

代码解析:

from_crawler:类方法,用@classmethod标识,通过参数crawler可以拿到全局配置的信息,全局配置在setting中
​
open_spider:当spider开启的时候,被激活,做初始化操作
​
close_spider:当spider接结束的时候,会调用,关闭数据库

接下来配置setting文件就ok了

//谁的数大,优先级就越高,先被调用
ITEM_PIPELINES = {
   'tutorial.pipelines.TextPipeline': 300,
   'tutorial.pipelines.MongoPipeline': 400,
}
​
​
MONGO_URI='localhost'
MONGO_DB='tutorial'

 

介绍完了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值