请参见以下自定义图像管道中可以覆盖的方法: - classscrapy.pipelines.images.ImagesPipeline¶
这个 ImagesPipeline 是 FilesPipeline ,自定义字段名并为图像添加自定义行为。
- file_path(self, request, response=None, info=None, *, item=None)¶
每个下载的项调用一次此方法。它返回源于指定的 response . 除了……之外 response ,此方法接收原始的 request , info 和 item 可以重写此方法以自定义每个文件的下载路径。 例如,如果文件URL以常规路径结束(例如 https://example.com/a/b/c/foo.png ,您可以使用以下方法将所有文件下载到 files 文件夹及其原始文件名(例如 files/foo.png ): import os
from urllib.parse import urlparse
from scrapy.pipelines.images import ImagesPipeline
class MyImagesPipeline(ImagesPipeline):
def file_path(self, request, response=None, info=None, *, item=None):
return 'files/' + os.path.basename(urlparse(request.url).path)
同样,您可以使用 item 根据某些项属性确定文件路径。 默认情况下 file_path() 方法返回 full/<request URL hash>.<extension> .
- get_media_requests(item, info)¶
工作方式与 FilesPipeline.get_media_requests() 方法,但对图像URL使用不同的字段名。 必须返回每个图像URL的请求。
- item_completed(results, item, info)¶
这个 ImagesPipeline.item_completed() 当一个项目的所有图像请求都已完成时(要么已完成下载,要么由于某种原因失败),将调用方法。 工作方式与 FilesPipeline.item_completed() 方法,但使用不同的字段名存储图像下载结果。 默认情况下, item_completed() 方法返回项。
|