首页 > 解决方案 > 抓取具有相应名称的图像,如 URL 中所示

问题描述

基本上我已经抓取了数千张图片并设法将它们放入按名称分类的文件夹中。在这些文件夹中,图像标有许多随机数。我想知道是否有办法从 URL 中提取标签来命名图像。

例如。

https://s3.amazonaws.com/cdn-origin-etr.akc.org/wp-content/uploads/2017/11/13002044/Affenpinscher-On-White-04.jpg

此链接对应的图片已标注 02563d3fe1d2933fe6dec09dc00b69bbabbf1560.jpg

我希望它与链接匹配:Affenpinscher-On-White-04.jpg

有人知道我该怎么做吗?

我为此使用了scrapy。

标签: webscrapyscreen-scraping

解决方案


如果您只是查看scrapy文档,这已经可用

https://docs.scrapy.org/en/latest/topics/media-pipeline.html#module-scrapy.pipelines.files

扩展媒体管道

在此处查看您可以在自定义文件管道中覆盖的方法:

classescrapy.pipelines.files.FilesPipeline[source] file_path(self, request, response=None, info=None, *, item=None)[source] 每个下载的项目调用一次此方法。它返回源自指定响应的文件的下载路径。

除了response之外,这个方法还接收原始的request、info和item

您可以覆盖此方法以自定义每个文件的下载路径。

例如,如果文件 URL 以常规路径结尾(例如https://example.com/a/b/c/foo.png),您可以使用以下方法将所有文件以其原始文件名下载到文件夹中(例如文件/foo.png):

import os
from urllib.parse import urlparse

from scrapy.pipelines.files import FilesPipeline

class MyFilesPipeline(FilesPipeline):

    def file_path(self, request, response=None, info=None, *, item=None):
        return 'files/' + os.path.basename(urlparse(request.url).path)

类似地,您可以使用 item 根据某些 item 属性来确定文件路径。

默认情况下,file_path() 方法返回 full/..

2.4 版新功能:item 参数。


推荐阅读