# 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, lea aquí: [**Web Search**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/search/broken-reference/README.md), [**Búsqueda de noticias**](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, incluya 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. Navegue por los detalles usando la navegación de la derecha o desplazándose hacia abajo en la página.
{% endhint %}

## Ejemplos de solicitud

En los ejemplos a continuación, 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

# Estructura la carga útil.
payload = {
    'source': 'google_search',
    'query': 'adidas',
    'parse': True,
    'context': [
        {'key': 'udm', 'value': '2'},
    ],
}

# Obtén la respuesta.
response = requests.post(
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)

# Imprime la respuesta con formato en 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

# Estructura la carga útil.
payload = {
    'source': 'google_search',
    'query': 'adidas',
    'parse': True,
    'context': [
        {'key': 'tbm', 'value': 'isch'},
    ],
}

# Obtén la respuesta.
response = requests.post(
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)

# Imprime la respuesta con formato en 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 el método de integración síncrona [**Realtime**](/products/es/web-scraper-api/integration-methods/realtime.md) en nuestros ejemplos. Si deseas usar [**Proxy Endpoint**](/products/es/web-scraper-api/integration-methods/proxy-endpoint.md) o la 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 búsqueda de Google Image.

<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>Establece 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, establezca value en <mark style="background-color:orange;"><strong>2</strong></mark>. Encuentre 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, establezca value 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 el renderizado de JavaScript cuando se establece en <code>html</code>. <a href="/spaces/xofNngbwiAAH0MB3lMAb/pages/47852075b446d7f11217f4c0334348f21fb197b8#javascript-rendering"><strong>Más información</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 el <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 información</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; **por favor, seleccione uno de ellos**. Usar ambos simultáneamente puede provocar conflictos o un comportamiento inesperado.

#### Operadores avanzados de búsqueda de Google

Al extraer datos, puede resultarte útil combinar operadores avanzados de búsqueda de Google con tu consulta. Esto te permite personalizar el alcance de la búsqueda, asegurando 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 a continuación.

```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 se debe adaptar 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>Accept-Language</code> valor del encabezado 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 información</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 habilitarla.</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 funciona como un contenedor para parámetros de Google más obscuros, como limitar/ordenar resultados por fecha, así como otros filtros, algunos de los cuales dependen de <code>tbm</code> (p. ej. <code>tbs=app_os:1</code> solo está disponible con el <code>tbm</code> valor <code>app</code>). Más información <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 aplicaciones. 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 de contexto

Todos los parámetros de contexto deben añadirse al arreglo `context` como objetos con pares `key` y `valor` 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`, `resultados`, y otros. La tabla siguiente presenta una lista detallada de cada función de SERP que analizamos, junto con su descripción y tipo de datos. 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>resultados</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 de 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 analizador 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 cuando se creó el trabajo de scraping.</td><td>timestamp</td></tr><tr><td><code>updated_at</code></td><td>La marca de tiempo cuando terminó 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 la SERP de Google.</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 abreviados cuando hay más de un elemento disponible para el tipo de resultado.
{% endhint %}

### Orgánico

La Image Search `organic` sección muestra listados no pagados en los resultados de Google Image Search, organizados por relevancia mediante el algoritmo de Google. Estos resultados se presentan a los 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>link</code></td><td>La URL del sitio donde se размещa la imagen.</td><td>array</td></tr><tr><td><code>image</code></td><td>La URL de la imagen.</td><td>array</td></tr><tr><td><code>title</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>pos_overall</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 corresponde, 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 autocorregió el término de búsqueda proporcionado.</td><td>array</td></tr></tbody></table>

### Búsquedas sugeridas

El `suggested_searches` (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: 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/api-targets/es/motores-de-busqueda/google/search/image-search.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.
