Saltar al contenido

Descargue la hoja de cálculo pública de google docs a csv con python

Después de de esta larga búsqueda de datos solucionamos esta contratiempo que tienen muchos los usuarios. Te dejamos la solución y nuestro deseo es serte de mucha ayuda.

Solución:

Solo use solicitudes, es mucho mejor que usar urllib:

import requests
response = requests.get('https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv')
assert response.status_code == 200, 'Wrong status code'
print(response.content)

Puedes instalarlo con

pip install requests

No está almacenando cookies.

Primero déjeme decirle que apoyo completamente la recomendación de usar el más excelente requests Biblioteca.

Sin embargo, si necesita hacer esto en vanilla Python 2, el problema radica en el hecho de que Google lo está rebotando a través de redirecciones HTTP 302, y espera que recuerde las cookies que está configurando con cada respuesta. Cuando detecta que no está almacenando cookies, lo redirige a la página de inicio de sesión.

Por defecto, urllib2.urlopen (o el abridor regresó de build_opener) seguirá las redirecciones 302, pero no almacenará cookies HTTP. Tienes que enseñarle a tu abridor cómo hacer eso. Al igual que:

>>> from cookielib import CookieJar
>>> from urllib2 import build_opener, HTTPCookieProcessor
>>> opener = build_opener(HTTPCookieProcessor(CookieJar()))
>>> resp = opener.open('https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv')
>>> data = resp.read()

De nuevo, usa requests si es posible, pero si no es posible, la biblioteca estándar puede hacer el trabajo.

El requests La biblioteca es excelente y el estándar de oro para las solicitudes HTTP de Python; sin embargo, este estilo de descarga, aunque aún no está obsoleto, no es probable que dure, refiriéndose específicamente al estilo de enlace de descarga. De hecho, el downloadUrl El campo de la API de Google Drive v2 ya está obsoleto. La forma actualmente aceptada de exportar Google Sheets como CSV es mediante utilizando la API de Google Drive (actual).

Entonces, ¿por qué la API de Drive? ¿No se supone que esto es algo para la API de Hojas de cálculo? Bueno, la API de Hojas de cálculo es para hoja de cálculo-funcionalidad orientada, es decir, formato de datos, cambio de tamaño de columna, creación de gráficos, validación de celda, etc., mientras que la API de Drive es para Archivo-funcionalidad orientada, es decir, importación / exportación.

A continuación se muestra una solución completa de cmd-line. (Si no usa Python, puede usarlo como pseudocódigo y elegir cualquier lenguaje compatible con las bibliotecas cliente de las API de Google). Para el fragmento de código, asuma la hoja más actual llamada inventory (los archivos más antiguos con ese nombre se ignoran) y DRIVE es el punto final del servicio API:

FILENAME = 'inventory'
SRC_MIMETYPE = 'application/vnd.google-apps.spreadsheet'
DST_MIMETYPE = 'text/csv'

# query for latest file named FILENAME
files = DRIVE.files().list(
    q='name="%s" and mimeType="%s"' % (FILENAME, SRC_MIMETYPE),
    orderBy='modifiedTime desc,name').execute().get('files', [])

# if found, export 1st matching Sheets file as CSV
if files:
    fn = '%s.csv' % os.path.splitext(files[0]['name'].replace(' ', '_'))[0]
    print('Exporting "%s" as "%s"... ' % (files[0]['name'], fn), end='')
    data = DRIVE.files().export(fileId=files[0]['id'], mimeType=DST_MIMETYPE).execute()

    # if non-empty file
    if data:
        with open(fn, 'wb') as f:
            f.write(data)
        print('DONE')

Si su hoja es grande, es posible que deba exportarla en trozos; consulte esta página para saber cómo hacerlo. ese. Si eres nuevo en las API de Google, tengo un video de introducción (algo anticuado pero) fácil de usar para ti. (Hay 2 videos después de eso que también pueden ser útiles).

Recuerda algo, que puedes optar por la opción de agregar una reseña si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *