【问题标题】:Scraping images with corresponding names as seen in the URLs抓取具有相应名称的图像,如 URL 中所示
【发布时间】:2021-01-15 13:55:00
【问题描述】:

基本上,我已经抓取了数千张图片,并设法将它们放入按名称分类的文件夹中。在这些文件夹中,图像标有许多随机数。我想知道是否有办法从 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。

【问题讨论】:

  • 您能否分享您的代码,以便我们了解这些图像是如何收集的?

标签: web scrapy screen-scraping


【解决方案1】:

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

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

扩展媒体管道

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

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

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

您可以重写此方法来自定义每个文件的下载路径。

例如,如果文件 URL 以常规路径结尾(例如 https://example.com/a/b/c/foo.png),您可以使用以下方法将所有文件以其原始文件名(例如 files/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 参数。

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多