在学习Item Pipeline之前,或许我们应该先去了解一下Items,如果怕麻烦的话,就暂且把它理解成字典这个数据类型吧。
那么Item Pipeline又是什么鬼?
Item Pipeline
官方文档解释是:
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
以下是item pipeline的一些典型应用:
- 清理HTML数据
- 验证爬取的数据(检查item包含某些字段)
- 查重(并丢弃)
- 将爬取结果保存到数据库中
编写自己的item pipeline
编写你自己的item pipeline很简单,每个item pipiline组件是一个独立的Python类,同时必须实现以下方法:
文档也给出了几个极好的例子:http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/item-pipeline.html
启用item pipeline
实例
说了这么多,是时候动手体验一把了,那么干什么呢?
要不就看看女神呗:https://movie.douban.com/celebrity/1016930/photos/
我们的目的是下载这些图片,之前我们已经尝试写过了类似的项目,不过这次我们不妨用:http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/images.html,可以省不少事呢!
首先自然是创建一个项目,然后就是定义好item,如下图:
开启图片管道:
设置一个文件夹来存储图片:
我们用命令创建一个spider:
scrapy genspider mm "movie.douban.com/celebrity/1016930/photos"
写入如下代码:
# -*- coding: utf-8 -*-
import scrapy
from satomi.items import SatomiItem
class MmSpider(scrapy.Spider):
name = 'mm'
allowed_domains = ['movie.douban.com/celebrity/1016930/photos']
start_urls = ['https://movie.douban.com/celebrity/1016930/photos/?start={number}'.format(number=str(i*30)) for i in range(11)]
def parse(self, response):
item = SatomiItem()
item['image_urls'] = response.xpath('//div[@class="cover"]/a/img/@src').extract()
yield item
运行结果如下:
目录中也有了图片:
以上。
网友评论