欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scrapy爬虫框架入门(中) - Item Pipeline

程序员文章站 2022-05-02 10:08:24
...
更多文章请关注公众号「我偶像龟叔

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,此时这里可以看作框架模型(model)

item pipeline常见实现示例:

  1. 将爬取结果保存到 数据库
  2. 下载项目图片(item返回包含图片字段)
  3. 数据清理、查重、验证

本次案例会延伸上一篇文章,阅读之前可以回顾上一篇文章。
Scrapy爬虫框架入门(上) - 慕课网爬虫

四大内置方法:

1、process_item(self, item, spider)# 必须
  调用会返回对应爬虫(spider)已爬取到的参数对象。
  item – 被爬取的item对象
  spider – 爬取该item的spider对象
  
 2、open_spider(self, spider)# 非必须
   spider开启会被调用,可做数据库连接。
   spider – 被开启的spider对象
    
 3、close_spider(self, spider)# 非必须
   spider关闭时会被调用,可做关闭数据库。
   spider – 被开启的spider对象

 4、from_crawler(cls, crawler)# 非必须
   配合__init__使用,创建新的管道实例。不详解...

process_item() 方法测试案例:

#settings.py

ITEM_PIPELINES = {
   'imooc_spider.pipelines.TestPipeline': 300,
}

pipelines.py
Scrapy爬虫框架入门(中) - Item Pipeline

1、编写MongoDB储存类案例:

这里的process_item方法加了isinstance函数判读类型,因为之后一个框架不单只爬取一个项目。当有多个项目的时候,通过判断可以分别处理不同spider对象间的数据。
settings.py


ITEM_PIPELINES = {
   'imooc_spider.pipelines.ImoocMongoDbPipeline': 300,
}

pipelines.py
Scrapy爬虫框架入门(中) - Item Pipeline
结果:
Scrapy爬虫框架入门(中) - Item Pipeline

2、编写下载项目图片案例:

实现图片管道必须继承ImagesPipeline类

from scrapy.pipelines.images import ImagesPipeline

内置方法:

1、get_media_requests(item, info):
  请求下载指定item对象数据
  
2、item_completed(self, results, item, info):
  对下载结果进行处理
  results - 下载好的资源参数([(True, {'url': 'https://img.mukewang.com/5861d2500001d39406000338-240-135.jpg', 'path': 'full/6922b98c7acde37f0b570650844e2e660b82991a.jpg', 'checksum': '037f4f643599f3e7870225798ece845b', 'status': 'downloaded'})])
  item - 被爬取的item对象

案例实现:

# settings.py

ITEM_PIPELINES = {
   'imooc_spider.pipelines.ImoocSpiderPipeline': 300, # 资源爬取模型
   'imooc_spider.pipelines.ImoocImagePipeline': 301, # 图片下载模型
}
IMAGES_STORE = 'public/images' # 图片默认下载路径

pipelines.py
Scrapy爬虫框架入门(中) - Item Pipeline
结果:
Scrapy爬虫框架入门(中) - Item Pipeline

结语:
文章介绍了item pipeline的基本原理和自定义数据储存、图片下载的方法。有疑问可以到github上一起交流学习。

源码公众号回复关键字「慕课网爬虫

相关标签: 龟谷爬虫 python