Python 如果不使用item.py,则无法通过管道重命名下载的图像

Python 如果不使用item.py,则无法通过管道重命名下载的图像,python,python-3.x,web-scraping,scrapy,scrapy-spider,Python,Python 3.x,Web Scraping,Scrapy,Scrapy Spider,我使用python的scrapy模块创建了一个脚本,用于从torrent站点的多个页面下载和重命名电影图像,并将其存储在桌面文件夹中。当要下载这些图像并将其存储在桌面文件夹中时,我的脚本是一样的。然而,我现在正在努力做的是动态重命名这些文件。由于我没有使用item.py文件,而且我也不希望这样做,因此我很难理解pipelines.py文件的逻辑将如何处理重命名过程 我的蜘蛛(它可以完美地下载图像): pipelines.py包含:(以下几行是占位符,让您知道我至少试过了): 如何通过pipeli

我使用python的scrapy模块创建了一个脚本,用于从torrent站点的多个页面下载和重命名电影图像,并将其存储在桌面文件夹中。当要下载这些图像并将其存储在桌面文件夹中时,我的脚本是一样的。然而,我现在正在努力做的是动态重命名这些文件。由于我没有使用
item.py
文件,而且我也不希望这样做,因此我很难理解
pipelines.py
文件的逻辑将如何处理重命名过程

我的蜘蛛(
它可以完美地下载图像
):

pipelines.py
包含:(
以下几行是占位符,让您知道我至少试过了
):


如何通过
pipelines.py
重命名图像而不使用
item.py

您需要对原始
图像的子类化:

from scrapy.pipelines.images import ImagesPipeline

class YifyPipeline(ImagesPipeline):

    def file_path(self, request, response=None, info=None):
        image_name = request.url.split('/')[-1]
        return image_name
然后在您的设置中引用它:

custom_settings = {
    'ITEM_PIPELINES': {'my_project.pipelines.YifyPipeline': 1},
}

但是请注意,如果不同的文件具有相同的名称,则简单的“使用确切的文件名”想法会导致问题,除非您向文件名添加唯一的文件夹结构或其他组件。这就是默认情况下使用基于校验和的文件名的原因之一。如果您想包含一些原始逻辑以防止出现这种情况,请参考原始逻辑。

您需要对原始
imagesipeline
进行子类化:

from scrapy.pipelines.images import ImagesPipeline

class YifyPipeline(ImagesPipeline):

    def file_path(self, request, response=None, info=None):
        image_name = request.url.split('/')[-1]
        return image_name
然后在您的设置中引用它:

custom_settings = {
    'ITEM_PIPELINES': {'my_project.pipelines.YifyPipeline': 1},
}

但是请注意,如果不同的文件具有相同的名称,则简单的“使用确切的文件名”想法会导致问题,除非您向文件名添加唯一的文件夹结构或其他组件。这就是默认情况下使用基于校验和的文件名的原因之一。如果您想包含一些原始逻辑以防止出现这种情况,请参考原始逻辑。

我不明白
item.py
与此有什么关系。你会如何使用它?我不知道
item.py
与它有什么关系。你将如何使用它?最后,我发现它工作。您的解决方案是完美的,但我之所以出错,只是因为我使用
CrawlerProcess
运行脚本。因此,为了使其正常工作,我需要使用这一行
import sys;sys.path.append(r'C:\Users\WCS\Desktop\yify_spider')
位于我的spider之上,这将导致
scrapy.cfg
。但是,当使用
CrawlerProcess
运行脚本时,除了这个奇怪的导入之外,您知道还有其他选择吗?。谢谢。@robots.txt我不知道为什么首先需要这样做。您的文件结构或脚本的运行位置可能有一些奇怪的地方。您可能想查看一下@malberts提供的任何解决方案。提前谢谢。最后,我发现它起作用了。您的解决方案是完美的,但我之所以出错,只是因为我使用
CrawlerProcess
运行脚本。因此,为了使其正常工作,我需要使用这一行
import sys;sys.path.append(r'C:\Users\WCS\Desktop\yify_spider')
位于我的spider之上,这将导致
scrapy.cfg
。但是,当使用
CrawlerProcess
运行脚本时,除了这个奇怪的导入之外,您知道还有其他选择吗?。谢谢。@robots.txt我不知道为什么首先需要这样做。您的文件结构或脚本的运行位置可能有一些奇怪的地方。您可能想查看一下@malberts提供的任何解决方案。提前谢谢。