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

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

Я делаю парсинг Google-Sheets и встала задача из определенной колонки парсить все фотографии.
У меня есть условно 5 товаров на каждой строке, я своим скриптом для каждого извлекаю свои значения (наименование, цена, количество и т.д), но есть колонка с фотографиями, нигде не нашел подходящей информации для данной задачи, а ИИ говорит, что просто так через API это невозможно.
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Средний 9 комментариев
Пригласить эксперта
Ответы на вопрос 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 и, наверное, даже проще.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Diamond Personnel R&C Москва
До 110 000 ₽
DigitalHR Москва
от 100 000 до 150 000 ₽
DigitalHR Москва
от 130 000 до 180 000 ₽