使用其他爬取信息的 scrapy 图像管道文件名
scrapy image pipeline filename unsing other crawled info
有什么方法可以用我们通过蜘蛛获得的其他信息(文本)来命名抓取的图像吗?
例如,在这种情况下,我想要带有文章标题和文章发布日期的图像,这些图像是我在蜘蛛中获得的:
蜘蛛文件
# lines of code
def parse(self, response):
# lines of code
yield {
'date':date,
'title': article_title,
'image_urls': clean_urls
}
pipelines.py
from scrapy.pipelines.images import ImagesPipeline
class customImagesPipeline(ImagesPipeline):
def file_path(self, request, response=None, info=None, *, item=None):
return f"images/{request.url.split('/')[-1]}"
解决此问题的一种方法是覆盖 get_media_requests
方法并在图像请求 meta
属性中设置图像名称,这样您就可以在 file_path
中访问它方法。
如果您将一张图像 url 作为字符串传递给 image_urls
,则以下示例将起作用:
from scrapy.http import Request
from scrapy.pipelines.images import ImagesPipeline
class customImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
return Request(
item["image_urls"],
meta = {
"image_name": f"{item['title']}_{item['date']}",
}
)
def file_path(self, request, response=None, info=None) -> str:
return f"images/{request.meta['image_name']}.jpg"
有什么方法可以用我们通过蜘蛛获得的其他信息(文本)来命名抓取的图像吗? 例如,在这种情况下,我想要带有文章标题和文章发布日期的图像,这些图像是我在蜘蛛中获得的:
蜘蛛文件
# lines of code
def parse(self, response):
# lines of code
yield {
'date':date,
'title': article_title,
'image_urls': clean_urls
}
pipelines.py
from scrapy.pipelines.images import ImagesPipeline
class customImagesPipeline(ImagesPipeline):
def file_path(self, request, response=None, info=None, *, item=None):
return f"images/{request.url.split('/')[-1]}"
解决此问题的一种方法是覆盖 get_media_requests
方法并在图像请求 meta
属性中设置图像名称,这样您就可以在 file_path
中访问它方法。
如果您将一张图像 url 作为字符串传递给 image_urls
,则以下示例将起作用:
from scrapy.http import Request
from scrapy.pipelines.images import ImagesPipeline
class customImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
return Request(
item["image_urls"],
meta = {
"image_name": f"{item['title']}_{item['date']}",
}
)
def file_path(self, request, response=None, info=None) -> str:
return f"images/{request.meta['image_name']}.jpg"