Очистка изображений с соответствующими именами, как показано в URL-адресах

#web #scrapy #screen-scraping

#веб #scrapy #очистка экрана

Вопрос:

В основном я очистил тысячи изображений и сумел поместить их в папки, классифицированные по имени. В этих папках изображения помечены множеством случайных чисел. Мне интересно, есть ли способ извлечь метку из 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.

Комментарии:

1. Не могли бы вы поделиться своим кодом, чтобы мы могли видеть, как собираются эти изображения?

Ответ №1:

Если вы просто посмотрите на документацию scrapy, это уже доступно

https://docs.scrapy.org/en/latest/topics/media-pipeline.html#module-scrapy.pipelines .Файлы

Расширение конвейеров мультимедиа

Смотрите Здесь методы, которые вы можете переопределить в конвейере пользовательских файлов:

classscrapy.pipelines.Файлы.FilesPipeline[источник] file_path(self, request, response=None, info = None, *, item = None)[источник] Этот метод вызывается один раз для каждого загруженного элемента. Он возвращает путь загрузки файла, полученного из указанного ответа.

В дополнение к ответу, этот метод получает исходный запрос, информацию и элемент

Вы можете переопределить этот метод, чтобы настроить путь загрузки каждого файла.

Например, если URL-адреса файлов заканчиваются как обычные пути (например https://example.com/a/b/c/foo.png ), вы можете использовать следующий подход для загрузки всех файлов в папку files с их исходными именами файлов (например, 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)
 

Аналогично, вы можете использовать элемент для определения пути к файлу на основе некоторого свойства элемента.

По умолчанию метод file_path() возвращает полный/ ..

Новое в версии 2.4: параметр item.