无法通过管道以自定义方式重命名下载的图像
Trouble renaming downloaded images in a customized manner through pipelines
我使用 python 的 scrapy 模块创建了一个脚本,用于从 torrent 站点下载和重命名电影图像,并将它们存储在 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
。
覆盖 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
我使用 python 的 scrapy 模块创建了一个脚本,用于从 torrent 站点下载和重命名电影图像,并将它们存储在 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
。
覆盖 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