一、实现scrapy 自动下载图片到本地的功能,通过项目管道设置。
首先要在setting中搭建pipeline的管道名称
ITEM_PIPELINES= {
'mm.pipelines.MmPipeline':300,
'scrapy.pipelines.images.ImagesPipeline':1,
}
管道队伍添加了新成员!后面的数字代表处理顺序,数字越小处理越早。
setting中还要做如下配置:
#用于保存图片
IMAGES_URLS_FIELD ="front_image_url"#对应上面标号1,这个配置好了,image就是去item找front_这个字段
project_dir=os.path.abspath(os.path.dirname(__file__))
IMAGES_STORE = os.path.join(project_dir,'images')#设置图片保存的路径,配置相对路径,换电脑也没事,在articlespider下面新建一个image的文件夹
解释下:
1、在setting 文件中ITEM_PIPELINE添加: 'scrapy.pipelines.images.ImagesPipeline':1
1为处理顺序,顺序越小,越先处理;
2、继续在setting中添加图片URL地址获取,
IMAGES_URLS_FIELD = "front_image_url" #front_image_url为Item 中存储图片URL的字段,应该为list类型;所以我们应将前面存入Item时设置为list
3、设置图片下载到本地的路径
绝对路径:IMAGES_STORE = ""
相对路径: 多用相对路径,工程迁移后绝对路径不能使用了
创建一个images的文件夹。
跟setting放在同一个目录之下。
别忘了setting中添加os模块
二、运行main.py可见 在项目文件下新生成了images文件,并下载了图片,自动生成了图片名字
三、扩展功能: 对图片进行过滤:
在setting 文件中设置:
IMAGES_MIN_HEIGHT = 100
IMAGES_MIN_WIDTH = 100
过滤掉宽度高度小于100的图片
四、pipeline中配置image
思路:自定义pipline,多加个管道,该管道继承下载图片的类,并重写与Item 交互的方法,从众提取到本地路径,并返回这个Item交给下一个pipline管道。获取文件存放的路径,设置下载图片的大小。
原来的scrapy.pipelines.images.ImagesPipeline':1,
这一步已经可以解决图片下载问题了,但是如果你想要图片下载的高度的定制化,就需要做如下的配置。这就解释了我已经有了图片下载的通道为什么还要再一遍pipeline
打断点进行测试,可以看到,图片的路径已经填充进来了。
下一步我们就要跟数据库打交道了。mysql发挥用处