> 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/search-engines/google/search/news-search.md).

# Búsqueda de noticias

Extrae resultados de Google News a gran escala y obtén datos completamente analizados. Extrae artículos con títulos, fuentes y fechas de publicación.

La `google_search` la fuente está diseñada para recuperar resultados de Google Search (SERPs). Esta subpágina presenta específicamente datos relacionados con Google News Search. Para explorar otros tipos de resultados, lea aquí: [**Búsqueda web**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/search/broken-reference/README.md), [**Búsqueda de imágenes**](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 la búsqueda de Google News, incluya el `context:udm` parámetro con el valor establecido en `12` o `context:tbm` parámetro con el valor establecido en `nws`.
{% endhint %}

{% hint style="info" %}
Explorar salida [**diccionario de datos**](#data-dictionary) para cada función SERP de News, 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 del lado derecho o desplazándose hacia abajo en la página.
{% endhint %}

## Ejemplos de solicitud

En los ejemplos siguientes, hacemos una solicitud para obtener páginas de resultados de búsqueda de News 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": 12
            }
        ]
    }'
```

{% 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': 12},
    ],
}

# 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: 12 },
    ],
};

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
source=google_search&query=adidas&parse=true&context[0][key]=udm&context[0][value]=12&access_token=12345abcde
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

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

$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": 12},
		},
	}

	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 = 12 },
                }
            };

            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", 12))
        );

        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": 12
        }
    ]
}
```

{% 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": "nws"
            }
        ]
    }'
```

{% 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': 'nws'},
    ],
}

# 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: "nws" },
    ],
};

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
source=google_search&query=adidas&parse=true&context[0][key]=tbm&context[0][value]=nws&access_token=12345abcde
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

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

$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": "nws"},
		},
	}

	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 = "nws" },
                }
            };

            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", "nws"))
        );

        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": "nws"
        }
    ]
}
```

{% endtab %}
{% endtabs %}

Usamos el método de integración síncrono [**Realtime**](/products/es/web-scraper-api/integration-methods/realtime.md) en nuestros ejemplos. Si desea usar [**Proxy Endpoint**](/products/es/web-scraper-api/integration-methods/proxy-endpoint.md) o asíncrona [**Push-Pull**](/products/es/web-scraper-api/integration-methods/push-pull.md) integración, consulte 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 News.

<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><code>source</code></strong></mark></td><td>Establece el scraper. Use <code>google_search</code>.</td><td>–</td></tr><tr><td><mark style="background-color:green;"><strong><code>query</code></strong></mark></td><td>La palabra clave o frase a buscar.</td><td>–</td></tr><tr><td><mark style="background-color:orange;"><strong><code>context:</code></strong></mark><br><mark style="background-color:orange;"><strong><code>udm</code></strong></mark></td><td>Para obtener resultados de búsqueda de News, establezca el valor en <mark style="background-color:orange;"><strong>12</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><code>context:</code></strong></mark><br><mark style="background-color:orange;"><strong><code>tbm</code></strong></mark></td><td>Para obtener resultados de búsqueda de News, establezca el valor en <strong><code>nws</code></strong>. Los otros valores aceptados son: <code>app</code>, <code>blg</code>, <code>bks</code>, <code>dsc</code>, <code>isch</code>, <code>pts</code>, <code>plcs</code>, <code>rcp</code>, <code>lcl</code></td><td>–</td></tr><tr><td><code>render</code></td><td>Establecer <code>html</code> es obligatorio para esta fuente. <a href="/products/es/web-scraper-api/features/js-rendering-and-browser-control.md#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>. Explorar 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 su endpoint de callback. <a href="/products/es/web-scraper-api/integration-methods/push-pull.md"><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="/products/es/web-scraper-api/features/http-context-and-job-management/user-agent-type.md"><strong>aquí</strong></a>.</td><td><code>desktop</code></td></tr></tbody></table>

\- parámetro obligatorio

{% hint style="warning" %}
**Nota:** `udm` y `tbm` los parámetros context no se pueden usar juntos en una sola solicitud de scraping; seleccione uno de ellos. Usar ambos simultáneamente puede provocar conflictos o un comportamiento inesperado.
{% endhint %}

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

Al extraer, puede resultar útil combinar los operadores avanzados de búsqueda de Google con su consulta. Esto le permite personalizar el alcance de la búsqueda, garantizando que los resultados sean más relevantes y específicos. Explore 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). Vea un ejemplo a continuación.

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

### Localización

Adapte 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 obtener más información, lea sobre nuestras <code>geo_location</code> estructuras de parámetros <a href="/products/es/web-scraper-api/features/localization/serp-localization.md#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 su página de búsqueda de Google. <a href="/products/es/web-scraper-api/features/localization/domain-locale.md#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 la 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><tr><td><code>limit</code></td><td>Número de resultados a recuperar en cada página.</td><td><code>10</code></td></tr><tr><td><p><code>context</code>:</p><p><code>limit_per_page</code></p></td><td>Si desea extraer varias páginas con la misma dirección IP, incluya un arreglo JSON y especifique los números de página usando la clave <code>page</code> También debe indicar el número de resultados orgánicos en cada página añadiendo una <code>limit</code> clave. <a href="#limit-per-page"><strong>Ver ejemplo</strong></a><strong>.</strong></td><td>-</td></tr></tbody></table>

#### Límite por página

Para usar esta función, incluya un arreglo JSON con objetos JSON que contengan los siguientes datos:

<table><thead><tr><th width="142">Parámetro</th><th width="446.3333333333333">Descripción</th><th>Ejemplo</th></tr></thead><tbody><tr><td><code>page</code></td><td>El número de la página que desea extraer. Cualquier valor entero mayor que <code>0</code> funcionará</td><td><code>1</code></td></tr><tr><td><code>limit</code></td><td>El número de resultados en la página en cuestión. Cualquier valor entero entre <code>1</code> y <code>100</code> (incluido) funcionará.</td><td><code>90</code></td></tr></tbody></table>

#### Muestra de solicitud

```json
{
    "source": "google_search",
    "query": "adidas",
    "parse": true,
    "context": [
        {
            "key": "limit_per_page",
            "value": [
                {"page": 1, "limit": 10},
                {"page": 2, "limit": 90}
                    ]
        }]
}
```

### 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 activarlo.</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 específicos, como limitar/ordenar resultados por fecha, así como otros filtros, algunos de los cuales dependen del <code>tbm</code> parámetro (p. ej. <code>tbs=app_os:1</code> está disponible solo con <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>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 agregarse al `context` arreglo como objetos con `clave` y `valor` pares, p. ej.:

```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 noticias</summary>

```json
{
    "results": [
        {
            "content": {
                "url": "https://www.google.com/search?q=adidas&tbm=nws&uule=w+CAIQICINdW5pdGVkIHN0YXRlcw&gl=us&hl=en",
                "page": 1,
                "results": {
                    "main": [
                        {
                            "url": "https://www.cnn.com/2022/05/06/business/under-armour-stock-adidas-nike/index.html",
                            "desc": "Las cadenas de suministro con problemas y un aumento de coronavirus en China están causando \nproblemas a las principales marcas deportivas.",
                            "title": "Wall Street está harta de Under Armour, Nike y Adidas",
                            "source": "CNN",
                            "pos_overall": 1,
                            "relative_publish_date": "2 days ago"
                        },
                        ...
                        {
                            "url": "https://www.cnbc.com/2022/05/06/dsw-tests-layout-to-spotlight-brands-like-adidas-crocs-birkenstock.html",
                            "desc": "DSW está probando un nuevo diseño y distribución de tienda en una ubicación que abrirá este \nfin de semana en Houston, con el objetivo de centrar la atención de los clientes en...",
                            "title": "DSW está probando un diseño de tienda que pone el foco en marcas como \nAdidas, Crocs y Birkenstock",
                            "source": "CNBC",
                            "pos_overall": 10,
                            "relative_publish_date": "2 days ago"
                        }
                    ],
                    "total_results_count": 57300000
                },
                "parse_status_code": 12000
            },
            "created_at": "2022-05-09 07:25:03",
            "updated_at": "2022-05-09 07:25:07",
            "page": 1,
            "url": "https://www.google.com/search?q=adidas&tbm=nws&uule=w+CAIQICINdW5pdGVkIHN0YXRlcw&gl=us&hl=en",
            "job_id": "6929330379711060993",
            "status_code": 200,
            "parser_type": "v2"
        }
    ]
}
```

</details>

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

## Diccionario de datos de salida

#### Ejemplo HTML

<figure><img src="https://197269033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBaJCXoqO1zdFnaMnCKrg%2Fuploads%2Fgit-blob-e85c379033e1218d5a6154d05396d95e0f39f8c0%2Fgoogle_news_search.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Estructura JSON

La salida estructurada de Google News Search incluye campos como `URL`, `page`, `results`, y otros. La tabla siguiente presenta una lista detallada de cada función 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="265">Clave</th><th width="368.3333333333333">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>cadena</td></tr><tr><td><code>results</code></td><td>Un diccionario que contiene los resultados de la búsqueda.</td><td>arreglo</td></tr><tr><td><code>results.main</code></td><td>Una lista de resultados de noticias no pagados con sus detalles respectivos.</td><td>arreglo</td></tr><tr><td><code>results.additional</code></td><td>Una lista de artículos de tendencia con sus detalles respectivos.</td><td>objeto</td></tr><tr><td><code>results.total_results_count</code></td><td>El número total de resultados encontrados para la consulta de búsqueda.</td><td>arreglo</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>entero</td></tr><tr><td><code>created_at</code></td><td>La marca de tiempo en que se creó el trabajo de scraping.</td><td>marca de tiempo</td></tr><tr><td><code>updated_at</code></td><td>La marca de tiempo en que se terminó el trabajo de scraping.</td><td>marca de tiempo</td></tr><tr><td><code>page</code></td><td>Número de página relativo a la paginación de Google SERP.</td><td>entero</td></tr><tr><td><code>job_id</code></td><td>El ID del trabajo asociado con el trabajo de scraping.</td><td>cadena</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>entero</td></tr></tbody></table>

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

### Principal

Muestra una lista de resultados de noticias no pagados, proporcionando detalles relevantes para cada artículo.

<figure><img src="https://197269033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBaJCXoqO1zdFnaMnCKrg%2Fuploads%2Fgit-blob-6b871e8094990986dc5fa6bc3560cc56ff58ca12%2Fgoogle_news_search_3.png?alt=media" alt=""><figcaption></figcaption></figure>

```json
...
"main": [
    {
        "url": "https://www.yahoo.com/lifestyle/tiger-woods-nikes-epic-partnership-015311819.html",
        "desc": "Que alguna vez pudiera existir un mundo en el que Tiger Woods no estuviera patrocinado por \nNike parecía...",
        "title": "Cómo se deshizo la épica alianza entre Tiger Woods y Nike",
        "source": "Yahoo",
        "pos_overall": 1,
        "relative_publish_date": "1 day ago"
    },
                       ...
},

...
```

<table><thead><tr><th width="260.3333333333333">Clave (results.main)</th><th width="317">Descripción</th><th>Tipo</th></tr></thead><tbody><tr><td><code>url</code></td><td>La URL al artículo completo.</td><td>cadena</td></tr><tr><td><code>desc</code></td><td>Un breve fragmento del artículo completo.</td><td>cadena</td></tr><tr><td><code>title</code></td><td>El título del artículo.</td><td>cadena</td></tr><tr><td><code>source</code></td><td>El nombre del sitio web donde se publica el artículo.</td><td>cadena</td></tr><tr><td><code>pos_overall</code></td><td>Indica la posición general del resultado dentro de los resultados principales de News SERP.</td><td>entero</td></tr><tr><td><code>relative_publish_date</code></td><td>Describe hace cuánto se publicó el artículo.</td><td>cadena</td></tr></tbody></table>

### Adicional

Presenta una lista de artículos de tendencia, acompañada de detalles relevantes.

<figure><img src="https://197269033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBaJCXoqO1zdFnaMnCKrg%2Fuploads%2Fgit-blob-7e913fd56b889a262b0f091e6416676e4611d437%2Fgoogle_news_search_2.png?alt=media" alt=""><figcaption></figcaption></figure>

```json
...
"additional": [
    {
        "items": [
            {
                "pos": 1,
                "url": "https://www.complex.com/sneakers/a/brendan-dunne/nike-book-1-colorways-haven-hike-rattlesnake",
                "title": "Nike Book 1 Colorways Haven Hike Rattlesnake",
                "source": "Complex",
                "relative_publish_date": "1 day ago"
            },
         ...
        ],
        "pos_overall": 2,
        "section_title": "Devin Booker confirma problemas con el lanzamiento de Nike Book 1"
    }
...
```

<table><thead><tr><th width="265.3333333333333">Clave (results.additional)</th><th width="366">Descripción</th><th>Tipo</th></tr></thead><tbody><tr><td><code>items</code></td><td>Una lista de artículos con sus detalles respectivos.</td><td>arreglo</td></tr><tr><td><code>items.pos</code></td><td>Un indicador único que denota la posición del artículo en la lista.</td><td>entero</td></tr><tr><td><code>items.url</code></td><td>La URL al artículo completo.</td><td>cadena</td></tr><tr><td><code>items.title</code></td><td>El título del artículo.</td><td>cadena</td></tr><tr><td><code>items.source</code></td><td>El nombre del sitio web donde se publica el artículo.</td><td>cadena</td></tr><tr><td><code>items.relative_publish_date</code></td><td>Describe hace cuánto se publicó el artículo.</td><td>cadena</td></tr><tr><td><code>pos_overall</code></td><td>Indica la posición general del resultado dentro de los resultados adicionales de News SERP.</td><td>entero</td></tr><tr><td><code>section_title</code></td><td>El nombre de la sección adicional.</td><td>cadena</td></tr></tbody></table>


---

# 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/search-engines/google/search/news-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.
