> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/api-targets/es/motores-de-busqueda/google/search/image-search.md).

# Búsqueda de imágenes

El `google_search` source está diseñado para recuperar resultados de Google Search (SERPs). Esta subpágina presenta específicamente datos relacionados con Google Image Search. Para explorar otros tipos de resultados, lee aquí: [**Web Search**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/search/broken-reference/README.md), [**News Search**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/search/broken-reference/README.md).

{% hint style="warning" %}
Para extraer Google Image Search, incluye el `context:udm` parámetro con el valor establecido en `2` o `context:tbm` parámetro con el valor establecido en `isch`.
{% endhint %}

{% hint style="info" %}
Explorar salida [**diccionario de datos**](#data-dictionary) para cada función de Image SERP, ofreciendo una breve descripción, captura de pantalla, fragmento de código JSON analizado y una tabla que define cada campo analizado. Navega por los detalles usando la navegación del lado derecho o desplazándote hacia abajo en la página.
{% endhint %}

## Muestras de solicitudes

En los ejemplos de abajo, hacemos una solicitud para obtener páginas de resultados de búsqueda de imágenes para el término de búsqueda `adidas`.

### udm

{% tabs %}
{% tab title="cURL" %}

```shell
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
        "source": "google_search",
        "query": "adidas",
        "parse": true,
        "context": [
            {
                "key": "udm",
                "value": 2
            }
        ]
    }'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from pprint import pprint

# Structure payload.
payload = {
    'source': 'google_search',
    'query': 'adidas',
    'parse': True,
    'context': [
        {'key': 'udm', 'value': 2},
    ],
}

# Get response.
response = requests.post(
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)

# Print prettified response to stdout.
pprint(response.json())
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const https = require("https");

const username = "USERNAME";
const password = "PASSWORD";
const body = {
    source: "google_search",
    query: "adidas",
    parse: true,
    context: [
        { key: "udm", value: 2 },
    ],
};

const options = {
    hostname: "realtime.oxylabs.io",
    path: "/v1/queries",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        Authorization:
            "Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
    },
};

const request = https.request(options, (response) => {
    let data = "";

    response.on("data", (chunk) => {
        data += chunk;
    });

    response.on("end", () => {
        const responseData = JSON.parse(data);
        console.log(JSON.stringify(responseData, null, 2));
    });
});

request.on("error", (error) => {
    console.error("Error:", error);
});

request.write(JSON.stringify(body));
request.end();
```

{% endtab %}

{% tab title="HTTP" %}

```http
https://realtime.oxylabs.io/v1/queries?source=google_search&query=adidas&parse=true&context[0][key]=udm&context[0][value]=2&access_token=12345abcde
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$params = array(
    'source' => 'google_search',
    'query' => 'adidas',
    'parse' => true,
    'context' => [
        [
            'key' => 'udm',
            'value' => 2,
        ]
    ]
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");


$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
echo $result;

if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
```

{% endtab %}

{% tab title="Golang" %}

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	const Username = "USERNAME"
	const Password = "PASSWORD"

	payload := map[string]interface{}{
		"source": "google_search",
		"query":  "adidas",
		"parse":  true,
		"context": []map[string]interface{}{
			{"key": "udm", "value": 2},
		},
	}

	jsonValue, _ := json.Marshal(payload)

	client := &http.Client{}
	request, _ := http.NewRequest("POST",
		"https://realtime.oxylabs.io/v1/queries",
		bytes.NewBuffer(jsonValue),
	)

	request.SetBasicAuth(Username, Password)
	response, _ := client.Do(request)

	responseText, _ := ioutil.ReadAll(response.Body)
	fmt.Println(string(responseText))
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace OxyApi
{
    class Program
    {
        static async Task Main()
        {
            const string Username = "USERNAME";
            const string Password = "PASSWORD";

            var parameters = new {
                source = "google_search",
                query = "adidas",
                parse = true,
                context = new dynamic [] {
                    new { key = "udm", value = 2 },
                }
            };

            var client = new HttpClient();

            Uri baseUri = new Uri("https://realtime.oxylabs.io");
            client.BaseAddress = baseUri;

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
            requestMessage.Content = JsonContent.Create(parameters);

            var authenticationString = $"{Username}:{Password}";
            var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
            requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);

            var response = await client.SendAsync(requestMessage);
            var contents = await response.Content.ReadAsStringAsync();

            Console.WriteLine(contents);
        }
    }
}
```

{% endtab %}

{% tab title="Java" %}

```java
package org.example;

import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;

public class Main implements Runnable {
    private static final String AUTHORIZATION_HEADER = "Authorization";
    public static final String USERNAME = "USERNAME";
    public static final String PASSWORD = "PASSWORD";

    public void run() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("source", "google_search");
        jsonObject.put("query", "adidas");
        jsonObject.put("parse", true);
        jsonObject.put("context", new JSONArray()
                .put(new JSONObject()
                        .put("key", "udm")
                        .put("value", 2))
        );

        Authenticator authenticator = (route, response) -> {
            String credential = Credentials.basic(USERNAME, PASSWORD);
            return response
                    .request()
                    .newBuilder()
                    .header(AUTHORIZATION_HEADER, credential)
                    .build();
        };

        var client = new OkHttpClient.Builder()
                .authenticator(authenticator)
                .readTimeout(180, TimeUnit.SECONDS)
                .build();

        var mediaType = MediaType.parse("application/json; charset=utf-8");
        var body = RequestBody.create(jsonObject.toString(), mediaType);
        var request = new Request.Builder()
                .url("https://realtime.oxylabs.io/v1/queries")
                .post(body)
                .build();

        try (var response = client.newCall(request).execute()) {
            if (response.body() != null) {
                try (var responseBody = response.body()) {
                    System.out.println(responseBody.string());
                }
            }
        } catch (Exception exception) {
            System.out.println("Error: " + exception.getMessage());
        }

        System.exit(0);
    }

    public static void main(String[] args) {
        new Thread(new Main()).start();
    }
}
```

{% endtab %}

{% tab title="JSON" %}

```json
{
    "source": "google_search",
    "query": "adidas",
    "parse": true,
    "context": [
        {
            "key": "udm",
            "value": 2
        }
    ]
}
```

{% endtab %}
{% endtabs %}

### tbm

{% tabs %}
{% tab title="cURL" %}

```shell
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
        "source": "google_search",
        "query": "adidas",
        "parse": true,
        "context": [
            {
                "key": "tbm",
                "value": "isch"
            }
        ]
    }'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from pprint import pprint

# Structure payload.
payload = {
    'source': 'google_search',
    'query': 'adidas',
    'parse': True,
    'context': [
        {'key': 'tbm', 'value': 'isch'},
    ],
}

# Get response.
response = requests.post(
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)

# Print prettified response to stdout.
pprint(response.json())
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const https = require("https");

const username = "USERNAME";
const password = "PASSWORD";
const body = {
    source: "google_search",
    query: "adidas",
    parse: true,
    context: [
        { key: "tbm", value: "isch" },
    ],
};

const options = {
    hostname: "realtime.oxylabs.io",
    path: "/v1/queries",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        Authorization:
            "Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
    },
};

const request = https.request(options, (response) => {
    let data = "";

    response.on("data", (chunk) => {
        data += chunk;
    });

    response.on("end", () => {
        const responseData = JSON.parse(data);
        console.log(JSON.stringify(responseData, null, 2));
    });
});

request.on("error", (error) => {
    console.error("Error:", error);
});

request.write(JSON.stringify(body));
request.end();
```

{% endtab %}

{% tab title="HTTP" %}

```http
https://realtime.oxylabs.io/v1/queries?source=google_search&query=adidas&parse=true&context[0][key]=tbm&context[0][value]=isch&access_token=12345abcde
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$params = array(
    'source' => 'google_search',
    'query' => 'adidas',
    'parse' => true,
    'context' => [
        [
            'key' => 'tbm',
            'value' => 'isch',
        ]
    ]
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");


$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
echo $result;

if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
```

{% endtab %}

{% tab title="Golang" %}

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	const Username = "USERNAME"
	const Password = "PASSWORD"

	payload := map[string]interface{}{
		"source": "google_search",
		"query":  "adidas",
		"parse":  true,
		"context": []map[string]interface{}{
			{"key": "tbm", "value": "isch"},
		},
	}

	jsonValue, _ := json.Marshal(payload)

	client := &http.Client{}
	request, _ := http.NewRequest("POST",
		"https://realtime.oxylabs.io/v1/queries",
		bytes.NewBuffer(jsonValue),
	)

	request.SetBasicAuth(Username, Password)
	response, _ := client.Do(request)

	responseText, _ := ioutil.ReadAll(response.Body)
	fmt.Println(string(responseText))
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace OxyApi
{
    class Program
    {
        static async Task Main()
        {
            const string Username = "USERNAME";
            const string Password = "PASSWORD";

            var parameters = new {
                source = "google_search",
                query = "adidas",
                parse = true,
                context = new dynamic [] {
                    new { key = "tbm", value = "isch" },
                }
            };

            var client = new HttpClient();

            Uri baseUri = new Uri("https://realtime.oxylabs.io");
            client.BaseAddress = baseUri;

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
            requestMessage.Content = JsonContent.Create(parameters);

            var authenticationString = $"{Username}:{Password}";
            var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
            requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);

            var response = await client.SendAsync(requestMessage);
            var contents = await response.Content.ReadAsStringAsync();

            Console.WriteLine(contents);
        }
    }
}
```

{% endtab %}

{% tab title="Java" %}

```java
package org.example;

import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;

public class Main implements Runnable {
    private static final String AUTHORIZATION_HEADER = "Authorization";
    public static final String USERNAME = "USERNAME";
    public static final String PASSWORD = "PASSWORD";

    public void run() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("source", "google_search");
        jsonObject.put("query", "adidas");
        jsonObject.put("parse", true);
        jsonObject.put("context", new JSONArray()
                .put(new JSONObject()
                        .put("key", "tbm")
                        .put("value", "isch"))
        );

        Authenticator authenticator = (route, response) -> {
            String credential = Credentials.basic(USERNAME, PASSWORD);
            return response
                    .request()
                    .newBuilder()
                    .header(AUTHORIZATION_HEADER, credential)
                    .build();
        };

        var client = new OkHttpClient.Builder()
                .authenticator(authenticator)
                .readTimeout(180, TimeUnit.SECONDS)
                .build();

        var mediaType = MediaType.parse("application/json; charset=utf-8");
        var body = RequestBody.create(jsonObject.toString(), mediaType);
        var request = new Request.Builder()
                .url("https://realtime.oxylabs.io/v1/queries")
                .post(body)
                .build();

        try (var response = client.newCall(request).execute()) {
            if (response.body() != null) {
                try (var responseBody = response.body()) {
                    System.out.println(responseBody.string());
                }
            }
        } catch (Exception exception) {
            System.out.println("Error: " + exception.getMessage());
        }

        System.exit(0);
    }

    public static void main(String[] args) {
        new Thread(new Main()).start();
    }
}
```

{% endtab %}

{% tab title="JSON" %}

```json
{
    "source": "google_search",
    "query": "adidas",
    "parse": true,
    "context": [
        {
            "key": "tbm",
            "value": "isch"
        }
    ]
}
```

{% endtab %}
{% endtabs %}

Usamos [**Realtime**](/products/es/web-scraper-api/integration-methods/realtime.md) método de integración sincrónica en nuestros ejemplos. Si deseas usar [**Proxy Endpoint**](/products/es/web-scraper-api/integration-methods/proxy-endpoint.md) o integración asíncrona [**Push-Pull**](/products/es/web-scraper-api/integration-methods/push-pull.md) consulta la sección de [**métodos de integración**](/products/es/web-scraper-api/integration-methods.md) .

## Valores de los parámetros de solicitud

### Genérico

Opciones básicas de configuración y personalización para extraer resultados de Google Image Search.

<table><thead><tr><th width="222">Parámetro</th><th width="350.3333333333333">Descripción</th><th>Valor predeterminado</th></tr></thead><tbody><tr><td><mark style="background-color:green;"><strong>source</strong></mark></td><td>Define el scraper.</td><td><code>google_search</code></td></tr><tr><td><mark style="background-color:green;"><strong>query</strong></mark></td><td>La palabra clave o frase a buscar.</td><td>-</td></tr><tr><td><mark style="background-color:orange;"><strong>context:</strong></mark><br><mark style="background-color:orange;"><strong>udm</strong></mark></td><td>Para obtener resultados de búsqueda de imágenes, establece el valor en <mark style="background-color:orange;"><strong>2</strong></mark>. Encuentra otros valores aceptados <a href="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FeoShpvYuZlb4hGpCIXNG%2Fudm_values%20(eu%2Bus).json?alt=media&#x26;token=a6b77fab-b170-478c-b06f-b8fbf7ab64c7"><strong>aquí</strong></a>.</td><td>-</td></tr><tr><td><mark style="background-color:orange;"><strong>context:</strong></mark><br><mark style="background-color:orange;"><strong>tbm</strong></mark></td><td>Para obtener resultados de búsqueda de imágenes, establece el valor en <mark style="background-color:orange;"><strong>isch</strong></mark>. Otros valores aceptados: <code>app</code>, <code>blg</code>, <code>bks</code>, <code>dsc</code>, <code>nws</code>, <code>pts</code>, <code>plcs</code>, <code>rcp</code>, <code>lcl.</code></td><td>-</td></tr><tr><td><code>render</code></td><td>Habilita la renderización de JavaScript cuando se establece en <code>html</code>. <a href="/spaces/xofNngbwiAAH0MB3lMAb/pages/47852075b446d7f11217f4c0334348f21fb197b8#javascript-rendering"><strong>Más info</strong></a><strong>.</strong></td><td>-</td></tr><tr><td><code>parse</code></td><td>Devuelve datos analizados cuando se establece en <code>true</code>. Explora la salida <a href="#output-data-dictionary"><strong>diccionario de datos</strong></a>.</td><td><code>false</code></td></tr><tr><td><code>callback_url</code></td><td>URL de tu endpoint de callback. <a href="/spaces/xofNngbwiAAH0MB3lMAb/pages/28181dba27c108c1684f7f17f5d8fef78bd80d90"><strong>Más info</strong></a></td><td>-</td></tr><tr><td><code>user_agent_type</code></td><td>Tipo de dispositivo y navegador. La lista completa se puede encontrar <a href="/spaces/xofNngbwiAAH0MB3lMAb/pages/c0794af77dadf44c32dae6894baaca0b93585869"><strong>aquí</strong></a>.</td><td><code>desktop</code></td></tr></tbody></table>

&#x20;   \- parámetro obligatorio

\- `udm` y `tbm` los parámetros context no se pueden usar juntos en una sola solicitud de scraping; **elige uno de ellos**. Usar ambos al mismo tiempo puede provocar conflictos o un comportamiento inesperado.

#### Operadores de Búsqueda Avanzada de Google

Al hacer scraping, puede resultarte útil combinar operadores de búsqueda avanzada de Google con tu consulta. Esto te permite personalizar el alcance de la búsqueda, garantizando que los resultados sean más relevantes y específicos. Explora estos comandos especiales [**aquí**](https://ahrefs.com/blog/google-advanced-search-operators/) y [**aquí**](https://www.semrush.com/kb/831-how-to-use-google-advanced-search-operators). Consulta un ejemplo abajo.

```json
{
    "source": "google_search",
    "query": "iphone 15 launch inurl:apple",
}
```

### Localización

Adapta los resultados de búsqueda a ubicaciones geográficas e idiomas específicos.

<table><thead><tr><th width="222">Parámetro</th><th width="350.3333333333333">Descripción</th><th>Valor predeterminado</th></tr></thead><tbody><tr><td><code>geo_location</code></td><td>La ubicación geográfica para la que debe adaptarse el resultado. Usar este parámetro correctamente es extremadamente importante para obtener los datos correctos. Para más información, lee sobre nuestras <code>geo_location</code> estructuras de parámetros <a href="/spaces/xofNngbwiAAH0MB3lMAb/pages/7ba8016b17441e2b1496d43e14d3e47b6eefb6f9#google"><strong>aquí</strong></a><strong>.</strong></td><td>-</td></tr><tr><td><code>locale</code></td><td><code>Valor del encabezado Accept-Language</code> que cambia el idioma de la interfaz web de tu página de búsqueda de Google. <a href="/spaces/xofNngbwiAAH0MB3lMAb/pages/6eb70a43f15a81321802a17be08ec05b79c90a3f#google"><strong>Más info</strong></a>.</td><td>-</td></tr></tbody></table>

### Paginación

Controles para gestionar la paginación y la recuperación de resultados de búsqueda.

<table><thead><tr><th width="222">Parámetro</th><th width="350.3333333333333">Descripción</th><th width="167">Valor predeterminado</th></tr></thead><tbody><tr><td><code>start_page</code></td><td>Número de página inicial.</td><td><code>1</code></td></tr><tr><td><code>pages</code></td><td>Número de páginas a recuperar.</td><td><code>1</code></td></tr></tbody></table>

### Filtrado

Opciones para filtrar y refinar los resultados de búsqueda según varios criterios.

<table><thead><tr><th width="245">Parámetro</th><th width="350.3333333333333">Descripción</th><th>Valor predeterminado</th></tr></thead><tbody><tr><td><code>context</code>:<code>safe_search</code></td><td>Búsqueda segura. Establécelo en <code>true</code> para habilitarlo.</td><td><code>false</code></td></tr><tr><td><code>context</code>:<br><code>tbs</code></td><td><code>tbs</code> parámetro. Este parámetro es como un contenedor para parámetros de Google más oscuros, como limitar/ordenar resultados por fecha, así como otros filtros, algunos de los cuales dependen del <code>tbm</code> parámetro (por ejemplo, <code>tbs=app_os:1</code> solo está disponible con el valor <code>tbm</code> value <code>app</code>). Más info <a href="https://stenevang.wordpress.com/2013/02/22/google-advanced-power-search-url-request-parameters/"><strong>aquí</strong></a>.</td><td>-</td></tr></tbody></table>

### Otros

Configuraciones y controles avanzados adicionales para requisitos especializados.

<table><thead><tr><th width="222">Parámetro</th><th width="350.3333333333333">Descripción</th><th>Valor predeterminado</th></tr></thead><tbody><tr><td><code>context</code>:<br><code>fpstate</code></td><td>Establecer el valor de <code>fpstate</code> en <code>aig</code> hará que Google cargue más apps. Este parámetro solo es útil si se usa junto con el <code>render</code> parámetro.</td><td>-</td></tr><tr><td><code>context</code>:<br><code>nfpr</code></td><td><code>true</code> desactivará la autocorrección ortográfica</td><td><code>false</code></td></tr></tbody></table>

### Parámetros context

Todos los parámetros context deben agregarse al `context` array como objetos con pares `key` y `value` , por ejemplo:

```json
...
"context": [
    {
        "key": "filter",
        "value": "0"
    }
]
...
```

## Datos estructurados

SERP Scraper API es capaz de extraer un objeto HTML o JSON que contiene resultados de búsqueda de Google, ofreciendo datos estructurados sobre varios elementos de la página de resultados.

<details>

<summary><code>google_search</code> salida estructurada de imágenes</summary>

```json
{
    "results": [
        {
            "content": {
                "url": "https://www.google.com/search?q=adidas&tbm=isch&gbv=1&uule=w+CAIQICINdW5pdGVkIHN0YXRlcw&gl=us&hl=en",
                "results": {
                    "organic": [
                        {
                            "pos": 1,
                            "link": "/url?q=https://www.adidas.com/us/superstar-shoes/EG4958.html&sa=U&ved=2ahUKEwiP4pv98dH3AhUY8rsIHTP1C64QqoUBegQIAxAB&usg=AOvVaw1qdoyk_FXXss1qGlPCyT1k",
                            "image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQaV6fadzwfHzBcTbF0i3Uat_MLSvoJ6702u7iONGGz2jwdItge9zQTi6gjhg&s",
                            "title": "Men's Superstar Cloud White...",
                            "domain": "www.adidas.com",
                            "pos_overall": 1
                        },
                        ...
                        {
                            "pos": 20,
                            "link": "/url?q=https://www.adidas.com/us/men-shoes&sa=U&ved=2ahUKEwiP4pv98dH3AhUY8rsIHTP1C64QqoUBegQIBRAB&usg=AOvVaw37cvHwAEOJFq55hDO1iXtw",
                            "image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTiprl_ce5WWZHyY3fFm2iXpOkhiy3EoOMv7UnuRoZ3zvYcpOS1MCKlzIFuSes&s",
                            "title": "Men's Shoes & Sneakers |...",
                            "domain": "www.adidas.com",
                            "pos_overall": 20
                        }
                    ],
                    "search_information": {
                        "query": "adidas",
                        "showing_results_for": "adidas"
                    },
                    "suggested_searches": [
                        "logo",
                        "shoes",
                        "wallpaper",
                        "superstar",
                        "yeezy",
                        "stan smith",
                        "ultra boost",
                        "nmd",
                        "eqt",
                        "tubular"
                    ]
                },
                "parse_status_code": 12000
            },
            "created_at": "2022-05-09 07:26:14",
            "updated_at": "2022-05-09 07:26:18",
            "page": 1,
            "url": "https://www.google.com/search?q=adidas&tbm=isch&gbv=1&uule=w+CAIQICINdW5pdGVkIHN0YXRlcw&gl=us&hl=en",
            "job_id": "6929330677540195329",
            "status_code": 200,
            "parser_type": "v2"
        }
    ]
}
```

</details>

{% hint style="info" %}
Solo analizamos resultados de búsqueda de imágenes para **desktop** búsquedas.
{% endhint %}

## Diccionario de datos de salida

#### Ejemplo HTML

<figure><img src="/files/1d41ca915ec9ddf9ef0312d16ad8e677a6c4c2a7" alt=""><figcaption></figcaption></figure>

#### Estructura JSON

La salida estructurada de Google Image Search incluye campos como `URL`, `page`, `results`, y otros. La tabla de abajo presenta una lista detallada de cada función de SERP que analizamos, junto con su descripción y tipo de dato. La tabla también incluye algunos metadatos.

{% hint style="info" %}
El número de elementos y campos para un tipo de resultado específico puede variar según la consulta de búsqueda.
{% endhint %}

<table><thead><tr><th width="315.3333333333333">Clave (results.images)</th><th width="299">Descripción</th><th>Tipo</th></tr></thead><tbody><tr><td><code>url</code></td><td>La URL de la página de búsqueda de Google.</td><td>string</td></tr><tr><td><code>results</code></td><td>Un diccionario que contiene los resultados de la búsqueda.</td><td>array</td></tr><tr><td><code>results.organic</code></td><td>Una lista de resultados no pagados con sus respectivos detalles.</td><td>array</td></tr><tr><td><code>resaults.search_information</code></td><td>Una lista de detalles para la consulta de búsqueda enviada.</td><td>object</td></tr><tr><td><code>results.suggested_searches</code></td><td>Una lista de búsquedas sugeridas que se muestra justo debajo de la consulta de búsqueda original.</td><td>array</td></tr><tr><td><code>parse_status_code</code></td><td>El código de estado del trabajo de análisis. Puedes ver los códigos de estado del parser descritos <a href="https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/search/broken-reference/README.md"><strong>aquí</strong></a>.</td><td>integer</td></tr><tr><td><code>created_at</code></td><td>La marca de tiempo en la que se creó el trabajo de scraping.</td><td>timestamp</td></tr><tr><td><code>updated_at</code></td><td>La marca de tiempo en la que finalizó el trabajo de scraping.</td><td>timestamp</td></tr><tr><td><code>page</code></td><td>Número de página relativo a la paginación de Google SERP.</td><td>integer</td></tr><tr><td><code>job_id</code></td><td>El ID del trabajo asociado con el trabajo de scraping.</td><td>string</td></tr><tr><td><code>status_code</code></td><td>El código de estado del trabajo de scraping. Puedes ver los códigos de estado del scraper descritos <a href="https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/search/broken-reference/README.md"><strong>aquí</strong></a>.</td><td>integer</td></tr></tbody></table>

{% hint style="info" %}
En las siguientes secciones, los fragmentos de código JSON analizados están acortados cuando hay más de un elemento disponible para el tipo de resultado.
{% endhint %}

### Orgánico

La sección de Image Search `organic` muestra listados no pagados en los resultados de Google Image Search, organizados por relevancia mediante el algoritmo de Google. Estos resultados se presentan a usuarios que buscan contenido visual y se muestran en una sección dedicada distinta de otros tipos de resultados de búsqueda.

<figure><img src="https://lh7-us.googleusercontent.com/JbIWkxeHN1m-BqIrLFB9pITIkcozrf2PCpbGbacsr1QLzYmJDeon35IyU9NqTciBUMMfRmTxiA9yoXVTFnsffP5uEX9zhQkie_1vMmxZjsQcfM-RNZo5TsZpY8RqkGW1FyIBRYC-Ry3gpRJnGI0V71U" alt=""><figcaption></figcaption></figure>

```json
...
"organic": [
    {
        "pos": 1,
        "link": "/url?q=https://www.amazon.com/Ravensburger-Glitter-Unicorn-Together-Perfectly/dp/B08X4HRQQL&sa=U&ved=2ahUKEwi6suTk3_ODAxWNqZUCHToXDMkQqoUBegQICBAB&usg=AOvVaw0sGY22JL_Z1oVPkKfuOY-T",
        "image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcROtE0idmQWj_8Mt5JJoiLUFyJRSU7VANreAOFSijiLH9HsB4H3IWw8j_SxtA&s",
        "title": "Amazon.com: Ravensburger...",
        "domain": "www.amazon.com",
        "pos_overall": 1
    },
...
]
...
```

<table><thead><tr><th width="200">Clave (results.organic)</th><th width="446.3333333333333">Descripción</th><th>Tipo</th></tr></thead><tbody><tr><td><code>pos</code></td><td>Un indicador único que denota la posición de la imagen en la lista.</td><td>string</td></tr><tr><td><code>enlace</code></td><td>La URL del sitio donde se coloca la imagen.</td><td>array</td></tr><tr><td><code>imagen</code></td><td>La URL de la imagen.</td><td>array</td></tr><tr><td><code>título</code></td><td>El título del artículo donde se coloca la imagen.</td><td>object</td></tr><tr><td><code>dominio</code></td><td>El dominio del sitio que contiene el resultado de la imagen.</td><td>array</td></tr><tr><td><code>posicion_general</code></td><td>Un indicador único que denota la posición de la imagen en la lista.</td><td>integer</td></tr></tbody></table>

### Información de búsqueda

`información de búsqueda` es una sección que proporciona detalles sobre la consulta de búsqueda. Incluye información como el término de búsqueda original y, si aplica, cualquier autocorrección realizada por Google.

<figure><img src="/files/dda92932e141acec8f4f4bd849d1b6da9e4081b3" alt=""><figcaption></figcaption></figure>

```json
...
"search_information": {
    "query": "unicorn",
    "showing_results_for": "unicorn"
},
...
```

<table><thead><tr><th width="294">Clave (results.search_information)</th><th width="365.3333333333333">Descripción</th><th>Tipo</th></tr></thead><tbody><tr><td><code>query</code></td><td>El término de búsqueda original.</td><td>string</td></tr><tr><td><code>showing_results_for</code></td><td>El término de búsqueda para el que se muestran los resultados. <code>query</code> y <code>showing_results_for</code> puede diferir si Google corrigió automáticamente el término de búsqueda proporcionado.</td><td>array</td></tr></tbody></table>

### Búsquedas sugeridas

El `búsquedas_sugeridas` (array) en Google Image Search proporciona una lista de términos de búsqueda sugeridos relacionados con la consulta original. Los usuarios pueden explorar estas opciones de búsqueda adicionales para refinar o ampliar su búsqueda de imágenes.

<figure><img src="https://lh7-us.googleusercontent.com/tBGwN37xODwtHFLvQjBK0ZIKPhVR_JCupNCFno6vIbjDZXBlXb0NB6DH2cXgxz5fBLtttvnxQsNKRx4TV9kZOh7MZ9535dMdka3iAzrogVCtLBptZgv6y-db7F40myz00XYmPQvqUTdSbBP4E7eHyw8" alt=""><figcaption></figcaption></figure>

```json
...
"suggested_searches": [
    "cute",
    "rainbow",
    "drawing",
    "glitter",
    "wallpaper",
    "galaxy",
    "kawaii",
    "easy",
    "clipart",
    "transparent"
]
...
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://developers.oxylabs.io/api-targets/es/motores-de-busqueda/google/search/image-search.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
