Я создал скрипт с использованием модуля python scrapy для загрузки и переименования изображений фильмов с торрент-сайта и сохранения их в папке в рамках проекта scrapy.Когда я запускаю свой скрипт как есть, я обнаруживаю, что он безошибочно загружает изображения в эту папку.
На данный момент скрипт переименовывает эти изображения, используя удобную часть от request.url до pipelines.py
.
Как я могу переименовать эти загруженные изображения через pipelines.py
, используя их имена фильмов из переменной movie
, определенной в методе get_images()
?
паук содержит:
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:\Users\WCS\Desktop\yify_spider\yify_spider\spiders\Images",
}
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
после завершения переименования.