课程笔记5:Scrapy框架——Item Pipeline的用法

Item Pipeline(项目管道)。Spider解析完Response就会产生Item,Item就会被Engine传递到Item Pipeline,被定义的Item Pipeline组件就会顺次被调用,完成一连串的处理过程:

  • 清洗HTML数据
  • 验证爬取数据,检查爬取字段
  • 查重并丢弃重复内容
  • 将爬取结果存储到数据库中

核心方法

必须实现的方法:

  • process_item(item, spider)

可选实现的方法:

  • open_spider(spider)
  • close_spider(spider)
  • from_crawler(cls, crawler)

  • process_item(item, spider)

被定义的Item Pipeline会默认调用这个方法对Item进行处理,比如进行数据处理或者将数据写入数据库等操作。

参数:

  • item:Item对象,即被处理的Item
  • spider:Spider对象,即生成该Item的Spider

返回值:Item对象/抛出DropItem异常

不同返回值的效果:

  • Item对象——接着调用低优先级的Item Pipeline的process_item方法,直到所有方法被调用完毕
  • 抛出DropItem异常——Item会被丢弃,不再进行处理

  • open_spider(spider)

在Spider开启的时候被自动调用,可以进行初始化操作,如开启数据库连接等。

参数:spider,即被开启的Spider对象

  • close_spider(spider)

在Spider关闭时候被自动调用,可以进行一些收尾工作,如关闭数据库连接等。

参数:spider,即被关闭的Spider对象

  • from_crawler(cls, crawler)

是一个类方法,用@classmethod标识,通过crawler对象,拿到Scrapy的所有核心组件,如全局配置的每个信息。然后可以在这个方法里面创建一个Pipeline实例。

参数:

  • crawler:即Crawler对象
  • cls:就是Class,最后返回一个Class实例

实战

爬取目标:爬取网站,将每部电影的名称、类别、评分、简介、导演、演员的信息以及相关图片爬取下来。

数据保存:把每部电影的完整数据保存在MongoDB和Elasticsearch中,同时将导演、演员的相关图片保存成一个文件夹。(会使用Pipeline分别实现MongoDB存储、Elasticsearch存储、Image图片存储)

需要环境:

  • 软件:MongoDB和Elasticsearch
  • Python包:PyMongo、Elasticsearch、Scrapy

新建项目&Spider

新建一个项目:scrapy startproject scrapyitempipelinedemo

新建一个Spider:scrapy genspider scrape ssr1.scrape.center

构建索引页URL,拿到索引页的Response

(定义的翻页数量是X,就执行X次)

在Spider中,定义start_requests方法,向所有索引页发出Request,接收到的Response提交parse_index进一步处理:

import scrapy

class ScrapeSpider(scrapy.Spider):
    name = 'scrape'
    allowed_domains = ['ssr1.scrape.center']
    base_url = 'http://ssr1.scrape.center'
    # 定义域名
    max_page = 10
    # 定义最大的翻页数量

    def start_requests(self):
    #定义一个新的方法
        for i in range(1, self.max_page+1):
        # 逐一输出页面编号(1到10)
            url = f'{self.base_url}/page/{i}'
            # 构造页面的链接
   

猜你喜欢

转载自blog.csdn.net/weixin_58695100/article/details/122535537
今日推荐