五、Scrapy管道的使用-网易招聘

python编程快速上手(持续更新中…)

python爬虫从入门到精通

Scrapy爬虫框架



深入的学习scrapy管道的使用

1. pipeline中常用的方法:

process_item(self,item,spider):
管道类中必须有的函数
实现对item数据的处理
必须return item
open_spider(self, spider): 在爬虫开启的时候仅执行一次
close_spider(self, spider): 在爬虫关闭的时候仅执行一次

2. 管道文件的修改-job_simple.py

继续完善wangyi爬虫,在pipelines.py代码中完善

import json
class WangyiPipeline:

    def open_spider(self, spider):
        if spider.name == 'job':
            self.file = open('wangyi.json', 'w')

    def process_item(self, item, spider):
        if spider.name == 'job':
            item = dict(item)

            str_data = json.dumps(item, ensure_ascii=False) + ',\n'

            self.file.write(str_data)

        return item

    def close_spider(self, spider):
        if spider.name == 'job':
            self.file.close()


class WangyiSimplePipeline:

    def open_spider(self, spider):
        if spider.name == 'job_simple':
            self.file = open('wangyisimple.json', 'w')

    def process_item(self, item, spider):
        if spider.name == 'job_simple':
            item = dict(item)

            str_data = json.dumps(item, ensure_ascii=False) + ',\n'

            self.file.write(str_data)

        return item

    def close_spider(self, spider):
        if spider.name == 'job_simple':
            self.file.close()

在settings.py设置开启pipeline

ITEM_PIPELINES = {
‘myspider.pipelines.ItcastFilePipeline’: 400, # 400表示权重
‘myspider.pipelines.ItcastMongoPipeline’: 500, # 权重值越小,越优先执行!
}

3.管道添加mongo.db保存记录

版本:pymongo4.0

class MongoPipeline(object):

    def open_spider(self, spider):
        self.client = MongoClient('mongodb://127.0.0.1:27017')
        self.col = self.client['itcast']['wangyi']

    def process_item(self, item, spider):
        data = dict(item)
        self.col.insert_one(data)

        return item

    def close_spider(self, spider):
        self.client.close()

别忘了开启mongodb数据库

sudo service mongodb start

并在mongodb数据库中查看 mongo

思考:在settings中能够开启多个管道,为什么需要开启多个?
不同的pipeline可以处理不同爬虫的数据,通过spider.name属性来区分
不同的pipeline能够对一个或多个爬虫进行不同的数据处理的操作,比如一个进行数据清洗,一个进行数据的保存
同一个管道类也可以处理不同爬虫的数据,通过spider.name属性来区分

4. pipeline使用注意点

使用之前需要在settings中开启

pipeline在setting中键表示位置(即pipeline在项目中的位置可以自定义),值表示距离引擎的远近,越近数据会越先经过:权重值小的优先执行

有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值

pipeline中process_item的方法必须有,否则item没有办法接受和处理

process_item方法接受item和spider,其中spider表示当前传递item过来的spider

open_spider(spider) :能够在爬虫开启的时候执行一次
close_spider(spider) :能够在爬虫关闭的时候执行一次
上述俩个方法经常用于爬虫和数据库的交互,在爬虫开启的时候建立和数据库的连接,在爬虫关闭的时候断开和数据库的连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值