Scrapy 爬虫框架01—— piplines

scrapy里面的piplines主要用来处理接受spider传来的数据,也就是item。

在使用piplines的时候我们应该把settings.py中的ITEMS_PIPELINES注释掉。

ITEM_PIPELINES = {
    # 前面代表pipline的管道数目,后面代表优先级。(先执行谁)
   'myspiderpro1.pipelines.Myspiderpro1Pipeline': 300,
    'myspiderpro1.pipelines.Myspiderpro1Pipeline2': 299,
}

为了理解setting里面的内容,我们可以来看piplines.py文件

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html


class Myspiderpro1Pipeline(object):
    def process_item(self, item, spider):

        return item


class Myspiderpro1Pipeline2(object):
    def process_item(self, item, spider):
        item['rank']="A"
        return item

我们可以看到,'myspiderpro1.pipelines.Myspiderpro1Pipeline': 300,

里面的 myspiderpro01 代表爬虫项目的名字,piplines表示该文件夹下的pipelines文件,Myspiderpro1Pipeline 代表着第一个pipeline类,300代表距离,就是先执行那个Pipeline。在例子中,Myspiderpro1Pipeline是300,Myspiderpro1Pipeline1是299(在setting.py中设置),那么就是Myspiderpro1Pipeline1 return 的item再给Myspiderpro1Pipeline处理,就是先执行Myspiderpro1Pipeline1.

这样的设计可以使得pipelines做不同的操作。也可以让一个项目里面的多个爬虫被pipelines处理。

如下图:

class Myspiderpro1Pipeline(object):
    def process_item(self, item, spider):
        if spider.name=='itcast':
            pass

        return item

对应的spider文件:

# -*- coding: utf-8 -*-
import scrapy
import  logging

logger  = logging.getLogger(__name__)

class ItcastSpider(scrapy.Spider):
    name = "itcast"   #  爬虫名
    allowed_domains = ["itcast.cn"]    #允许爬取的范围
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']  #最开始请求url地址

    def parse(self, response):

        data = response.xpath("//div[@class='tea_con']//li")
        # 分组组成一个item字典
        for li in data:
            item1 = {}
            item1['name'] = li.xpath(".//h3/text()").extract_first()
            item1['title']= li.xpath('.//h4/text()').extract_first()
            logger.warning(item1)
            yield item1




 

你可能感兴趣的:(Scarpy)