Задать вопрос
@R0Zi

Как парсить фотографии gspread?

Я делаю парсинг Google-Sheets и встала задача из определенной колонки парсить все фотографии.
У меня есть условно 5 товаров на каждой строке, я своим скриптом для каждого извлекаю свои значения (наименование, цена, количество и т.д), но есть колонка с фотографиями, нигде не нашел подходящей информации для данной задачи, а ИИ говорит, что просто так через API это невозможно.
  • Вопрос задан
  • 242 просмотра
Подписаться 1 Средний 13 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
Вытаскивать с google drive как xlsx и потрошить содержимое. Обратить внимание на порядок картинок, если их вытаскивать просто механически, то порядок может не соответствовать ожидаемому (если таблица заполнялась не строго последовательно / картинки менялись местами / строки менялись местами).
import xml.etree.ElementTree as ET
import zipfile

from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build
import pandas as pd

# Настройки:
CREDENTIALS_FILE = 'GoogleSheetsCredentional.json'
FILE_ID = '18c2nnuVKZ-ndfklC6x9Sv9e84PFKc'  # из URL таблицы
SCHEMA = './/{http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing}'

# Аутентификация и скачивание:
creds = Credentials.from_service_account_file(CREDENTIALS_FILE, scopes=['https://www.googleapis.com/auth/drive'])

drive_service = build('drive', 'v3', credentials=creds)

# Скачиваем как Excel:
content = drive_service.files().export_media(
    mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', fileId=FILE_ID).execute()

# Сохраняем временный файл:
with open('temp.xlsx', 'wb') as f:
    f.write(content)

# Извлекаем данные и картинки:
df = pd.read_excel('temp.xlsx')

with zipfile.ZipFile('temp.xlsx', 'r') as z:
    # Парсим drawing.xml - потому что порядок картинок может быть не тот что ожидается...
    drawing_data = z.read('xl/drawings/drawing1.xml')
    root = ET.fromstring(drawing_data)
    file_names = []
    # Извлекаем картинки:
    for anchor in root.findall(f'{SCHEMA}oneCellAnchor'):
        image_name = anchor.find(f'{SCHEMA}cNvPr').get('name')
        file_names.append(image_name)
        z.extract(f'xl/media/{image_name}', 'images')

    df['image'] = pd.Series(file_names)
print(df)

68e5e85041844803428218.png

З.Ы. можно тоже самое сделать на openpyxl и, наверное, даже проще.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽