«

scrapy管道的使用

时间:2023-3-1 18:50     作者:wen     分类: Python


一、pipeline中常用的方法:

  1. process_item(self, item, spider):

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

  3. close_spider(self, spider): 在爬虫关闭的时候仅执行一次

二、管道文件的修改

# pipelines.py
from itemadapter import ItemAdapter
from pymongo import MongoClient

class WangyiPipeline:

    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        if spider.name == "job":
            self.file = open('wangyi.json', 'w')

    def process_item(self, item, spider):
        # 写数据
        return item

    def close_spider(self, spider):  # 在爬虫关闭的时候仅执行一次
        if spider.name == "job":
            self.file.close()

class WangyiSimplePipeline:

    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        if spider.name == "jobSimple":
            self.file = open('wangyijobSimple.json', 'w')

    def process_item(self, item, spider):
        # 写数据
        return item

    def close_spider(self, spider):  # 在爬虫关闭的时候仅执行一次
        if spider.name == "job":
            self.file.close()

class MongoPipeline(object):

    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        self.client = MongoClient('127.0.0.1', 27017)
        self.db = self.client['test']
        self.col = self.db['stu']

    def process_item(self, item, spider):
        # 写数据
        data = dict(item)
        self.col.insert_one(data)

        return item

    def close_spider(self, spider):  # 在爬虫关闭的时候仅执行一次
        if spider.name == "job":
            self.client.close()
# settings.py
ITEM_PIPELINES = {
   'wangyi.pipelines.WangyiPipeline': 300,
   'wangyi.pipelines.WangyiSimplePipeline': 301,
   'wangyi.pipelines.MongoPipeline': 302,
}

注意:

  1. 不同的pipeline可以处理不同爬虫的数据, 通过spider.name属性来区分
  2. 不同的pipeline能够对一个或多个爬虫爬虫进行不同的数据的操作,比如一个进行数据清洗,一个进行数据的保存
  3. 同一个管道类也可以处理不同爬虫的数据,通过spider.name属性来区分

四、pipeline使用注意点

  1. 使用之前需要在settings中开启
  2. pipeline在setting中键表示位置(即pipeline在项目中的位置可以自定义),值表示距离引擎的远近,越近数据会越先经过:权重值小的优先执行
  3. 有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值。
  4. pipeline中process_item的方法必须有,否则item没有办法接收和处理
  5. process_item方法接收item和spider,其中spider表示当前传递item过来的spider
  6. open_spider(self, spider): 在爬虫开启的时候仅执行一次
  7. close_spider(self, spider): 在爬虫关闭的时候仅执行一次
  8. 上述两个方法经常用于爬虫和数据库的交互,在爬虫开启的时候建立和数据库的连接,在爬出关闭的时候断开和数据库的连接

标签: 爬虫