Nano Hash - криптовалюты, майнинг, программирование

Как разобрать data-uri в python?

Элементы изображений HTML имеют этот упрощенный формат:

<img src='something'>

Это может быть data-uri, например:

data:image/png;base64,iVBORw0KGg...

Есть ли стандартный способ анализа этого с помощью python, чтобы я разделял данные content_type и base64, или мне нужно создать для этого свой собственный парсер?



Ответы:


1

Разделите URI данных на запятую, чтобы получить данные в кодировке base64 без заголовка. Вызовите base64.b64decode, чтобы декодировать это в байты. Наконец, запишите байты в файл.

from base64 import b64decode

data_uri = "data:image/png;base64,iVBORw0KGg..."

# Python 2 and <Python 3.4
header, encoded = data_uri.split(",", 1)
data = b64decode(encoded)

# Python 3.4+
# from urllib import request
# with request.urlopen(data_uri) as response:
#     data = response.read()

with open("image.png", "wb") as f:
    f.write(data)
23.11.2015

2

Python с версии 3.4 поддерживает data-uri. Под капотом с использованием urllib.request.DataHandler.

from urllib.request import urlopen

with urlopen(data_uri) as response:
    data = response.read()
30.10.2019

3

w3lib (библиотека, используемая Scrapy) имеет функцию для анализа Uris данных:

>>> from w3lib.url import parse_data_uri
>>> parse_data_uri('data:image/png;base64,iVBORw0KGg==')
ParseDataURIResult(media_type='image/png', media_type_parameters={}, data=b'\x89PNG\r\n\x1a')
04.10.2018
  • самое красивое решение имхо: короткое и дает хорошо структурированный результат 07.01.2019

  • 4

    Это может помочь:

    import re
    from lxml import html
    
    BASE_NAME = "image_"
    
    source_code = """<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=" alt="Black dot" />"""
    
    tree = html.fromstring(source_code)
    
    for i,image in enumerate(tree.xpath('//img[contains(@src, "data:image")]/@src')):
        image_type, image_content = image.split(',', 1)
        image_type = re.findall('data:image\/(\w+);base64', image_type)[0]
        with open("{}{}.{}".format(BASE_NAME, i, image_type), "wb") as f:
            f.write(image_content.decode('base64'))
        print "[*] '{}' image found with content: {}\n".format(image_type, image_content)
    

    Вывод:

    [*] 'png' image found with content: iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==
    
    [*] 'gif' image found with content: R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=
    

    Он сохранит каждое изображение base64 в тегах <img> с соответствующим расширением файла:

    Префикс BASE_NAME + цифры автоинкремента, предоставленные enumerate + image_extension

    введите здесь описание изображения

    23.11.2015

    5

    Исправление сообщения JRodDynamite:

    from base64 import decodestring
    
    png_arr= "data:image/png;base64,iVBORw0KGg..."
    png_arr = png_arr.split(",")
    png_arr = png_arr[1]
    
    fh = open("imageToSave.png", "wb")
    fh.write(decodestring(png_arr))
    fh.close()
    
    19.02.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..