🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
如果内置的Pipeline不满足我们的需求,我们可以在`pipelines.py`中继承`FilesPipeline`,或者`ImagesPipeline`来定义我们自己的Pipeline。 <br/> 下面继承`ImagesPipeline`来自定义一个Pipeline。步骤如下: <br/> **1. 在`pipelines.py`中自定义一个Pipeline** ```python from scrapy.pipelines.images import ImagesPipeline from urllib.parse import urlparse from os.path import basename, join import random class MyImagesPipeline(ImagesPipeline): def file_path(self, request, response=None, info=None, item=None): """ 这里只重写ImagesPipeline中的file_path方法,实现文件命名方式,更多重写规则见官网: https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/media-pipeline.html#topics-media-pipeline-override :return 必须返回的是字符串 """ path = urlparse(request.url).path # basename(path) 可以获取文件名,比如爬取的图片为 https://www.exam.com/db03408.jpg # 则获取 db03408.jpg # join(str, str) 第一参数为目录,第二个为文件名 return join(str(random.randint(100, 900)), basename(path)) ``` <br/> **2. 在`settings.py`中启动自定义的Pipeline** ```python ############## 必须指定的配置 ################## # 指定Pipeline类型 ITEM_PIPELINES = { # 'scrapy.pipelines.images.ImagesPipeline': 1 # 'scrapy.pipeline.files.FilesPipeline': 1 # Pipelines: 权重 'CareersTencent.pipelines.MyFilesPipeline': 1 } # 文件在你的电脑上的存储路径 # 如果你的存储的路径为F:/images/,scrapy则会将文件自动保存到 F:/images/full 目录 # 使用上面自定义的MyImagesPipeline后的图片路径为 F:/images/随机数/xxx.jpg IMAGES_STORE = "F:/images/" # FILES_STORE = "F:/images/" ```