# Almacenamiento en la nube

Los resultados de trabajos de Scraper API se almacenan en nuestro almacenamiento. Puedes obtener tus resultados desde nuestro almacenamiento al `GET`tando el `/results` endpoint.

Como alternativa, podemos subir los resultados a tu almacenamiento en la nube. De esta manera, no tienes que hacer solicitudes extra para obtener los resultados: todo va directamente a tu bucket de almacenamiento.

{% hint style="info" %}
La integración con almacenamiento en la nube funciona solo con [**Push-Pull**](/products/es/web-scraper-api/integration-methods/push-pull.md) método de integración.
{% endhint %}

Actualmente, admitimos estos servicios de almacenamiento en la nube:

* [**Google Cloud Storage**](#google-cloud-storage)
* [**Amazon S3**](#amazon-s3)
* [**Alibaba Cloud Object Storage Service (OSS)**](#alibaba-cloud-object-storage-service-oss)
* [**BytePlus Torch Object Storage (TOS)**](#byteplus-tos)
* [**Otro almacenamiento compatible con S3**](#other-s3-compatible-storage)

Si deseas usar un tipo de almacenamiento diferente, ponte en contacto con tu gerente de cuenta para analizar el plazo de entrega de la función.

La ruta de carga se ve así: `YOUR_BUCKET_NAME/job_ID.json`. Encontrarás el ID del trabajo en la respuesta que recibes de nosotros después de enviar un trabajo.

#### Entrada

<table><thead><tr><th>Parámetro</th><th width="187.33333333333331">Descripción</th><th>Valores válidos</th></tr></thead><tbody><tr><td><code>storage_type</code></td><td>Tu tipo de almacenamiento en la nube.</td><td><p><code>gcs</code> (Google Cloud Storage);</p><p><code>s3</code> (AWS S3); <code>tos</code> (BytePlus TOS); </p><p><code>s3_compatible</code> (cualquier almacenamiento compatible con S3).</p></td></tr><tr><td><code>storage_url</code></td><td>El nombre / URL de tu bucket de almacenamiento en la nube.</td><td><ul><li>Cualquier <code>s3</code> , <code>gcs</code> , o <code>tos</code> nombre del bucket;</li><li>Cualquier <code>s3-compatible</code> URL de almacenamiento.</li></ul></td></tr></tbody></table>

## **Google Cloud Storage**

La carga útil a continuación hace que Web Scraper API extraiga `https://example.com` y coloque el resultado en un bucket de Google Cloud Storage.

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "gcs",
    "storage_url": "bucket_name/path"
}
```

Para que los resultados de tu trabajo se suban a tu bucket de Google Cloud Storage, configura permisos especiales para nuestro servicio como se muestra a continuación:

{% stepper %}
{% step %}
**Crear un rol personalizado**

<div align="left"><img src="/files/fabf3a17a1cdd23ac7b0ce7f754e8913fb6215a9" alt=""></div>
{% endstep %}

{% step %}
**Añadir `storage.objects.create` permiso**

<div align="left"><img src="/files/326dff6eb43c0e45a4ebf82e35c069b6f7d48650" alt=""></div>
{% endstep %}

{% step %}
**Asignarlo a Oxylabs**

En el **Nuevos miembros** campo, introduce lo siguiente **correo electrónico de la cuenta de servicio de Oxylabs**:

```
oxyserps-storage@oxyserps-storage.iam.gserviceaccount.com
```

<div align="left"><img src="/files/63fc7bc7c5c988ea170547d837f60b3e4cc5416c" alt=""></div>
{% endstep %}
{% endstepper %}

## **Amazon S3**

La carga útil a continuación hace que Web Scraper API extraiga `https://example.com` y coloca el resultado en un bucket de Amazon S3.

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "s3",
    "storage_url": "bucket_name/path"
}
```

Para que los resultados de tu trabajo se suban a tu bucket de Amazon S3, configura los permisos de acceso para nuestro servicio. Para hacerlo, ve a [**https://s3.console.aws.amazon.com/**](https://s3.console.aws.amazon.com/) → **`S3`** → **`Almacenamiento`** → **`Nombre del bucket`**` ``(si no tienes uno, crea uno nuevo)` → **`Permisos`** → **`Política del bucket`**.

<div align="left"><img src="/files/a409718a7f5015a3cc49bd5d63a544fd5b2021ca" alt=""></div>

Puedes encontrar la política del bucket adjunta abajo o en el área de ejemplo de código.

{% file src="/files/e069034d243398f8dc01f795c1600a61c351f20f" %}
política del bucket s3
{% endfile %}

No olvides cambiar el nombre del bucket en `YOUR_BUCKET_NAME`. Esta política nos permite escribir en tu bucket, darte acceso a los archivos cargados y conocer la ubicación del bucket.

```json
{
    "Version": "2012-10-17",
    "Id": "Policy1577442634787",
    "Statement": [
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
        },
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}
```

## Alibaba Cloud Object Storage Service (OSS)

La carga útil a continuación hace que Web Scraper API extraiga `https://example.com` y coloca el resultado en un bucket de Alibaba Cloud OSS.&#x20;

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "s3_compatible",
    "storage_url": "https://ACCESS_KEY_ID:ACCESS_KEY_SECRET@BUCKET_NAME.oss-REGION.aliyuncs.com/FOLDER_NAME"
}
```

### Construcción de la Storage URL <a href="#forming-the-storage-url" id="forming-the-storage-url"></a>

Formato de Storage URL:

```http
https://ACCESS_KEY_ID:ACCESS_KEY_SECRET@BUCKET_NAME.oss-REGION.aliyuncs.com/FOLDER_NAME
```

{% hint style="warning" %}
Actualmente, **no podemos subir al bucket raíz**. Proporciona un nombre de carpeta específico para tus cargas.
{% endhint %}

Aquí es donde encontrarás `BUCKET_NAME` y `oss-REGION` de tu bucket:

<figure><img src="/files/81ec722e942b23eac126e699f37fecae68c6062e" alt=""><figcaption></figcaption></figure>

### Creación del Access Key y Secret <a href="#creating-the-access-key-and-secret" id="creating-the-access-key-and-secret"></a>

Para usar la interfaz compatible con S3 con Alibaba OSS, debes crear `ACCESS_KEY_ID` y `ACCESS_KEY_SECRET` como se muestra abajo. Para más información, consulta [![](https://img.alicdn.com/tfs/TB1ugg7M9zqK1RjSZPxXXc4tVXa-32-32.png)Cómo usar los SDK de Amazon S3 para acceder a OSS](https://www.alibabacloud.com/help/en/oss/developer-reference/use-amazon-s3-sdks-to-access-oss?spm=a2c63.p38356.0.i1).

{% stepper %}
{% step %}
Ve al **Menú de cuenta de AccessKey**

<div align="left"><figure><img src="/files/8595b19a029f33315b047ae20847edc08ba98aac" alt="" width="422"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
Inicia sesión en la **RAM console**

Accede a la [RAM console](https://ram.console.aliyun.com/) usando una **cuenta de Alibaba Cloud** o un **usuario RAM** que tenga permisos administrativos.
{% endstep %}

{% step %}
Ve a **Identidades** → **Usuarios** en el panel de navegación de la izquierda
{% endstep %}

{% step %}
Selecciona **Crear usuario** y usa el **RAM User AccessKey:**

<div align="left"><figure><img src="/files/96036a28a089b4d05ba5b9acceb10b917aa2611a" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="/files/ce562c3273850682d2c89d77c4c055c12b757288" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Conceder permisos al usuario RAM**

El usuario RAM recién creado no tiene permisos. Debes conceder **AliyunOSSFullAccess** permisos al usuario RAM. Luego, el usuario RAM podrá acceder a los recursos necesarios de Alibaba Cloud. Para más información, consulta [Conceder permisos a usuarios RAM](https://www.alibabacloud.com/help/en/ram/user-guide/grant-permissions-to-the-ram-user#task-187800).

<div align="left"><figure><img src="/files/77992dfcab6892fb15c9ccaa57a348ceb1d3985a" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
Obtén tu **AccessKey ID** y **AccessKey Secret**

Cuando se hayan concedido los permisos, vuelve a la **Autenticación** sección y, en la **Access Key** sección, selecciona **Crear AccessKey**. Elige crear un Access Key para un **servicio de terceros**. Entonces verás un `ACCESS_KEY_ID` y `ACCESS_KEY_SECRET`que luego puedes usar en tus solicitudes.
{% endstep %}
{% endstepper %}

### Límites de tasa de Alibaba OSS <a href="#alibaba-oss-ratelimits" id="alibaba-oss-ratelimits"></a>

Al realizar cargas concurrentes a Alibaba OSS, es posible alcanzar los límites de tasa de su cuenta/bucket, y las cargas comenzarán a agotarse por tiempo con el siguiente error:

<div align="left"><figure><img src="/files/6b3b7e86482303fd7e8634b5e72cd72f42210957" alt="" width="563"><figcaption></figcaption></figure></div>

En este caso, ponte en contacto con el soporte de Alibaba OSS para aumentar tus límites de tasa de OSS.

## BytePlus TOS

Puedes subir directamente los resultados extraídos a un bucket de BytePlus Torch Object Storage (TOS).

Para una conexión correcta, necesitarás:

* Un bucket TOS configurado correctamente.
* Tu access key y secret key.
* Un endpoint compatible con S3.

Puedes encontrar una lista de todos los endpoints S3 disponibles en la [documentación](https://docs.byteplus.com/en/docs/tos/docs-region-and-endpoint).

### Ejemplo

La siguiente carga útil hará scrape de `https://example.com` y subirá los resultados a tu bucket TOS.

```json
{
    "source": "universal",
    "query": "https://example.com",
    "storage_type": "tos",
    "storage_url": "https://access_key:secret_key@endpoint/bucket_name/path"
}
```

### Parámetros <a href="#docs-internal-guid-dbfc45c7-7fff-9754-b71a-bacb24e2ac54" id="docs-internal-guid-dbfc45c7-7fff-9754-b71a-bacb24e2ac54"></a>

<table><thead><tr><th width="166">Parámetro</th><th width="165">Valores disponibles</th><th>Descripción</th></tr></thead><tbody><tr><td><code>storage_type</code></td><td><code>tos</code></td><td>Especifica BytePlus TOS como proveedor de almacenamiento.</td></tr><tr><td><code>storage_url</code></td><td>Cadena URL</td><td>URL autenticada a tu bucket TOS (consulta el formato abajo).</td></tr></tbody></table>

### Formato de Storage URL

El `storage_url` debe construirse usando tus credenciales TOS y los detalles del bucket.

```bash
https://access_key:secret_key@endpoint/bucket_name/path
```

| Componente    | Descripción                                                                          |
| ------------- | ------------------------------------------------------------------------------------ |
| `access_key`  | Tu ID de access key de BytePlus.                                                     |
| `secret_key`  | Tu secret access key de BytePlus.                                                    |
| `endpoint`    | El endpoint específico de la región (por ejemplo, `tos-cn-hongkong.bytepluses.com`). |
| `bucket_name` | Nombre del bucket de destino.                                                        |
| `path`        | *(Opcional)* Ruta de carpeta específica del bucket.                                  |

{% hint style="warning" %}
Si tu Access Key o Secret Key contiene caracteres especiales (como `/`, `+`, o `=`), **deben codificarse en URL** antes de construir la cadena.
{% endhint %}

### Nomenclatura del archivo de salida

Oxylabs genera automáticamente nombres de archivo para los objetos subidos según los detalles del trabajo:

* **HTML/Contenido:** `{query_id}_{timestamp}.html`
* **Datos analizados:** `{query_id}_results.json`

Los archivos estarán accesibles en tu bucket en: `tos://{bucket_name}/{path}/{filename}`

## Otro almacenamiento compatible con S3

Si deseas que tus resultados se entreguen en una ubicación de almacenamiento compatible con S3, tendrás que incluir la `ACCESS_KEY:SECRET` cadena de autenticación en el `storage_url` valor en la carga útil:

```json
{
    "source": "universal",
    "url": "https://example.com",
    "storage_type": "s3_compatible",
    "storage_url": "https://ACCESS_KEY:SECRET@s3.oxylabs.io/my-videos"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.oxylabs.io/products/es/web-scraper-api/features/result-processing-and-storage/cloud-storage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
