有没有办法用我们从蜘蛛那里得到的其他信息(文本)来命名一张抓取的图像?

spider file

# 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方法,并在image requests meta属性中设置图像名称,这样就可以在file_path方法中访问它.

如果将一个图像url作为字符串传递给image_urls,则以下示例将起作用:

from scrapy.http import Request
from scrapy.pipelines.images import ImagesPipeline


class costumImagesPipeline(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"

Python相关问答推荐

如何计算两极打印机中 * 所有列 * 的出现次数?

试图找到Python方法来部分填充numpy数组

根据在同一数据框中的查找向数据框添加值

如何避免Chained when/then分配中的Mypy不兼容类型警告?

对于一个给定的数字,找出一个整数的最小和最大可能的和

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

在Python中动态计算范围

在单个对象中解析多个Python数据帧

使用groupby方法移除公共子字符串

如何在Python中获取`Genericums`超级类型?

判断solve_ivp中的事件

在matplotlib中使用不同大小的标记顶部添加批注

30个非DATETIME天内的累计金额

有没有办法在不先将文件写入内存的情况下做到这一点?

Django抛出重复的键值违反唯一约束错误

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

我如何为测试函数的参数化提供fixture 生成的数据?如果我可以的话,还有其他 Select 吗?

Django查询集-排除True值

401使用有效的OAuth令牌向Google Apps脚本Web App发出POST请求时出现未经授权的错误(";