麻烦通过管道以自定义的方式重命名下载图像



我已经使用python的废料模块创建了一个脚本,从洪流网站下载和重命名电影映像,并将其存储在scrapy项目中的文件夹中。当我按原样运行脚本时,我发现它在该文件夹文件夹中下载图像。

此时,脚本正在使用request.url的方便部分通过 pipelines.py 重命名这些图像。

如何通过 pipelines.py 使用其电影名称从get_images()中定义的变量movie重命名下载图像?

蜘蛛 包含:

from scrapy.crawler import CrawlerProcess
import scrapy, os
class yify_sp_spider(scrapy.Spider):
    name = "yify"
    start_urls = ["https://yts.am/browse-movies"]
    custom_settings = {
        'ITEM_PIPELINES': {'yify_spider.pipelines.YifySpiderPipeline': 1},
        'IMAGES_STORE': r"C:UsersWCSDesktopyify_spideryify_spiderspidersImages",
    }
    def parse(self, response):
        for item in response.css(".browse-movie-wrap"):
            movie_name = ''.join(item.css(".browse-movie-title::text").get().split())
            img_link = item.css("img.img-responsive::attr(src)").get()
            yield scrapy.Request(img_link, callback=self.get_images,meta={'movie':movie_name})
    def get_images(self, response):
        movie = response.meta['movie']
        yield {
            "movie":movie,
            'image_urls': [response.url],
        }
if __name__ == "__main__":
    c = CrawlerProcess({
        'USER_AGENT': 'Mozilla/5.0',   
    })
    c.crawl(yify_sp_spider)
    c.start()

pipelines.py 包含:

from scrapy.pipelines.images import ImagesPipeline
class YifySpiderPipeline(ImagesPipeline):
    def file_path(self, request, response=None, info=None):
        image_name = request.url.split('/')[-2]+".jpg"
        return image_name

重命名完成后,这样的下载图像之一应该看起来像Obsession.jpg

覆盖get_media_requests(),并将您需要的数据添加到请求中。然后从file_path()中的请求中获取该数据。

例如:

class YifySpiderPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        # Here we add the whole item, but you can add only a single field too.
        return [Request(x, meta={'item': item) for x in item.get(self.images_urls_field, [])]
    def file_path(self, request, response=None, info=None):
        item = request.meta.get('item')
        movie = item['movie']
        # Construct the filename.
        return image_name

最新更新