下载图片时为什么Scrapy哈希网址?

时间:2017-08-18 11:59:38

标签: web-scraping scrapy

为什么在下载图像时使用Scrapy哈希网址,如此处https://doc.scrapy.org/en/latest/topics/media-pipeline.html所示,其中SHA1用于哈希网址以给出每个图像的名称?这样做有什么实际优势吗?

1 个答案:

答案 0 :(得分:3)

我认为将文件存储为sha1哈希网址有任何重大优势 但是,有一些小优势:

  • 摆脱不安全的字符 - /:.等字符并不总是系统安全,文件名只是某些字符+ .jpg非常方便。
  • 恒定长度(在某些极少数情况下可能有用)。
  • 很容易验证欺骗过滤,例如相同的网址将具有相同的文件名。

我个人认为这是一个非常懒惰的解决方案。幸运的是,它可以延长,但它并不像应该的那样直截了当。

class MyImagesPipeline(ImagesPipeline):
    def filename(url):
        return url.replace(string.letters + '-_.', '')

    def file_path(self, request, response=None, info=None):
        # the original code
        # image_guid = hashlib.sha1(to_bytes(url)).hexdigest()
        # return 'full/%s.jpg' % (image_guid)
        # our code
        return 'full/' + self.filename(response.url)

    def thumb_path(self, request, response=None, info=None):
        return 'thumb/' + self.filename(response.url)

并在settings.py

中启用它