Las tarjetas de empleo se conectan, a través de una interfaz de datos, con una bandeja de almacenamiento ya revisada.
Revise las filas devueltas antes de almacenarlas.

Una API es una solicitud de su programa a otro servicio. Apify es el servicio anfitrión que inicia el trabajo y almacena el resultado. Un Actor es un programa alojado de recolección de datos. El Naukri Jobs Actor es el Actor de este método. Lee páginas públicas de Naukri. No usa un inicio de sesión de Naukri. Una Task es un ajuste de entrada guardado. La Task pública actual es solo una entrada de partida. No analiza empleos por usted. El Actor guarda filas de origen. Usted revisa el comprobante y elige filas para su proyecto.

Este camino usa la API de Apify. No es una API oficial de Naukri. No es una base de datos privada de una empresa. No es un índice completo de empleos de la India. Muestra este único Actor público.

1. Defina una búsqueda y un tope de filas

Anote las filas que quiere antes de empezar. Elija un puesto. Elija una ciudad de la India, o deje la ciudad vacía. Elija qué tan reciente debe ser la publicación de origen. Elija un número máximo pequeño de filas guardadas.

El Actor público actual acepta esta entrada:

  • `searchTerm` toma una palabra clave en cada línea.
  • `location` es opcional.
  • `maxItems` es el tope de filas. Limita las filas guardadas de toda la ejecución. El tope no es independiente para cada línea de palabra clave. Si lo omite, el tope numérico desaparece. Envíe siempre un número para este método.
  • `postedWithinDays` es texto. Use "0", "1", "3", "7", "15" o "30". El texto "0" significa cualquier fecha de publicación.
  • `experienceYears` es opcional. Es un número entero de 0 a 30. Fresher significa poca o ninguna experiencia laboral anterior en ese ajuste de búsqueda. El valor 0 pide el ajuste de búsqueda fresher. Este método no juzga la idoneidad para el puesto.
  • `sortBy` es `relevance` o `date`.
  • `excludeCompanies` es opcional. El ejemplo de abajo no lo usa.
  • `searchDepth` es `standard`, `extended` o `deep`. `standard` es la primera comprobación, de alcance limitado. Lee menos páginas de origen que las otras dos. Este método no necesita una búsqueda más profunda.

La Task pública actual guarda `searchTerm` "software engineer", `postedWithinDays` "7", `sortBy` "date" y `searchDepth` "standard". Ponga su puesto en `searchTerm`. Ponga su ciudad en `location` si quiere una ciudad. Defina su propio `maxItems`.

Un control comprobado usó valores distintos. Usó una palabra clave, "software engineer". No envió ubicación. Usó `postedWithinDays` "0", `maxItems` 2, `sortBy` "relevance" y `searchDepth` "standard". La ejecución guardó dos ID de empleo de Naukri distintos. Cada fila tenía un título, un nombre de empresa y una ubicación. Cada fila tenía un `jobUrl` directo de Naukri. Cada `sourceUrl` coincidía con la consulta pedida. `source` era naukri.com. Cada fila tenía `observedAt`. Ambas filas incluían `descriptionText`. Ambas filas incluían `experienceRaw`. Los dos rangos numéricos eran 0-5 y 0-2. Esos ceros son años mínimos observados. No son campos vacíos. El control no envió `experienceYears`. No prueba que se haya aplicado un filtro fresher.

La ejecución comprobada terminó con éxito. Su registro OUTPUT mostró estos valores conocidos. `rowsSaved` era 2. `requestedMaxItems` era 2. `pagesRequested` era 1. El comprobante informó 20 candidatos vistos. `failedRequests` era 0. `blockedRequests` era 0. `stopReason` era `max_items_reached`. La ejecución alcanzó el tope. Dos filas guardadas no son todos los empleos coincidentes. El control no indicó `searchesQueued`, `searchesFinished` ni `sourceStates`. Esos tres valores son desconocidos. Desconocido no es lo mismo que 0.

Una fila guardada puede incluir los campos de abajo.

  • `schemaVersion`
  • `jobId`
  • `title`
  • `companyName`
  • `location`
  • `experienceRaw`
  • `experienceMinYears`
  • `experienceMaxYears`
  • `skills`
  • `descriptionText`
  • `postedAt`
  • `postedAtRaw`
  • `jobUrl`
  • `searchTerm`
  • `searchLocation`
  • `sourceUrl`
  • `pageNumber`
  • `rankOnPage`
  • `status`
  • `statusReason`
  • `source`
  • `observedAt`

Un valor opcional puede estar ausente. La ausencia es desconocida. No es un cero. `descriptionText` puede estar presente y, aun así, omitir parte del texto del empleador. También puede omitir un requisito. `postedAt` y los campos de experiencia son lo que mostró el origen. No son una promesa de que el empleador va a contratar. `observedAt` es el momento en que el Actor vio la fila. No es el momento en que Naukri publicó el aviso por primera vez. Mantenga separados esos dos momentos.

`searchTerm`, `searchLocation` y `observedAt` pertenecen a la fila de origen en bruto. Si más adelante agrega su propia columna de consulta, usted creó esa columna. No es un campo de origen llamado query.

2. Inicie la ejecución y conserve el ID de la ejecución

Use su propia cuenta de Apify. Guarde el token en el lugar seguro que su proyecto ya usa para secretos. Un token es un secreto que prueba que la llamada pertenece a su cuenta. Mantenga un token real fuera de los artículos. Manténgalo fuera del código del navegador. Manténgalo fuera de los registros. Manténgalo fuera de una imagen de una URL. Esta lectura pública no necesita un inicio de sesión de Naukri.

La llamada de inicio devuelve información sobre la ejecución. No devuelve filas de empleo. Una ejecución es un inicio del Actor. Envíe la entrada como JSON. JSON es un formato de texto para datos estructurados. Incluya el encabezado `Content-Type: application/json`. Envíe el token en el encabezado `Authorization`. Escriba `Bearer`, un espacio y después el token. El cuerpo de abajo es una entrada didáctica original. No es un resultado en vivo.

http
POST https://api.apify.com/v2/acts/chronometrica~naukri-jobs-scraper/runs
Authorization: Bearer <APIFY_TOKEN>
Content-Type: application/json

{
  "searchTerm": "data analyst",
  "location": "Bengaluru",
  "maxItems": 2,
  "postedWithinDays": "7",
  "sortBy": "date",
  "searchDepth": "standard"
}
2. Inicie la ejecución y conserve el ID de la ejecución

Este cuerpo pide el puesto data analyst. Limita el lugar a Bengaluru. Guarda como máximo 2 filas. Pide avisos de los últimos 7 días. Ordena por fecha. Usa la profundidad standard. La documentación de inicio de ejecución describe este endpoint. La misma API permite fijar un tiempo de espera y un tope de cargo. Un tope de cargo detiene la ejecución en un límite de costo que usted elige. Fije ambos límites en una primera ejecución. Este artículo no da ningún precio.

De la respuesta, guarde `data.id`. Ese es el ID de la ejecución. Guarde también la entrada y las opciones que almacenó el servicio. El ID de la ejecución, el ID del dataset y el ID del almacén son tres valores distintos. Manténgalos separados.

3. Espere un estado terminado

Lea la ejecución con el mismo encabezado privado. Espere un tiempo breve entre lecturas. Deténgase cuando el estado sea terminal. Un estado terminal es un estado terminado. Los valores terminados son `SUCCEEDED`, `FAILED`, `TIMED-OUT` y `ABORTED`.

http
GET https://api.apify.com/v2/actor-runs/<RUN_ID>
Authorization: Bearer <APIFY_TOKEN>
3. Espere un estado terminado

Guarde `status`, `buildId`, `startedAt`, `finishedAt`, `defaultDatasetId` y `defaultKeyValueStoreId`. `SUCCEEDED` significa que el Actor terminó. No significa que el origen quedó cubierto por completo. `FAILED`, `TIMED-OUT` y `ABORTED` requieren una revisión antes de confiar en las filas. La documentación del estado de la ejecución describe esta lectura.

4. Lea el comprobante OUTPUT

OUTPUT es el registro de resumen del Actor. Léalo desde el almacén de clave-valor. Un almacén de clave-valor guarda registros con nombre para la ejecución. Use `defaultKeyValueStoreId` como ID del almacén.

http
GET https://api.apify.com/v2/key-value-stores/<STORE_ID>/records/OUTPUT
Authorization: Bearer <APIFY_TOKEN>
4. Lea el comprobante OUTPUT

Lea estos campos:

  • `rowsSaved` es el número de filas almacenadas.
  • `requestedMaxItems` es el tope que pidió.
  • `searchesQueued` es el trabajo de búsqueda que quedó en cola.
  • `searchesFinished` es el trabajo de búsqueda que terminó.
  • `pagesRequested` es el número de páginas de origen solicitadas. Una página de origen es una página de resultados de Naukri. No es una lectura del dataset guardado.
  • `blockedRequests` es el número de solicitudes de origen bloqueadas.
  • `failedRequests` es el número de solicitudes de origen fallidas.
  • `sourceStates` indica cómo terminó el origen.
  • `stopReason` indica por qué se detuvo el Actor.

Si `rowsSaved` es igual a `requestedMaxItems` y `stopReason` es `max_items_reached`, el tope detuvo la ejecución. Las filas aún pueden servir. No son la búsqueda completa. Un 0 contado significa que el Actor informó de forma explícita un conteo de cero. Un campo ausente es desconocido. No convierta lo desconocido en 0.

Use `sourceStates` antes de explicar un archivo vacío. Un resultado vacío puede significar que el origen no devolvió filas. También puede significar que no se alcanzó el origen. Esos dos resultados son distintos. Si `failedRequests` o `blockedRequests` es mayor que 0, no trate la ciudad como vacía. Si falta `sourceStates`, el resultado del origen es desconocido. Conserve el comprobante en cualquier caso.

5. Lea el dataset después de que termine la ejecución

Un dataset es el conjunto guardado de elementos de fila. Léalo después de que la ejecución sea terminal. Un dataset que todavía crece no es estable. Termine la ejecución primero. Si necesita filas antes del final, diseñe ese caso a propósito. No trate una página intermedia como el conjunto final.

http
GET https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json&offset=0&limit=2
Authorization: Bearer <APIFY_TOKEN>
5. Lea el dataset después de que termine la ejecución

La respuesta es un arreglo JSON. `offset` es el número de filas guardadas que se omiten. `limit` es el número de filas que se devuelven en esta lectura. Esta lectura es una página del dataset. No es una página de origen de Naukri. La documentación de elementos del dataset describe esta llamada. Cuente las filas del arreglo. Sume ese conteo a `offset`. Lea de nuevo. Conserve un comprobante breve de cada lectura. El comprobante necesita el offset, el limit, el conteo devuelto y cualquier error de lectura.

Para un dataset terminado de dos filas, la primera lectura puede devolver dos filas. La lectura siguiente usa offset 2 y limit 2. Puede devolver un arreglo vacío. El arreglo vacío tiene un conteo devuelto de 0. Ese 0 significa que esta página no tenía más filas. No significa que las filas anteriores desaparecieron. Las filas leídas son 2. Si `rowsSaved` es 2, esos conteos coinciden.

Si falla una lectura del dataset, conserve esa falla en el comprobante. No reemplace una lectura fallida por un arreglo vacío. Las filas no leídas siguen siendo desconocidas.

6. Guarde la identidad antes de filtrar

Guarde la fila en bruto. Guarde `jobId` como texto. Conserve los ceros iniciales. Un programa que guarda el ID como número puede eliminar esos ceros. Agregue el prefijo de origen `naukri:` al ID de empleo. Ese prefijo es el espacio de nombres. Un espacio de nombres muestra qué sitio creó el ID. Otro sitio de empleo puede usar los mismos dígitos para un empleo distinto. Su espacio de nombres permanece separado.

Guarde también `jobUrl`, `sourceUrl`, el `searchTerm` en bruto, el `searchLocation` en bruto, `observedAt` y el ID de la ejecución. Compruebe que la identidad está presente. Compruebe los tipos que espera. Si falta `jobId`, la fila queda sin resolver. Sin resolver significa que todavía no puede vincular la fila con un empleo de origen. No cree una clave de origen para ella.

Una observación es un avistamiento guardado de una fila de origen. El mismo aviso en una ejecución posterior es una observación nueva de un empleo de origen conocido. No es, de forma automática, un empleo abierto nuevo. Mantenga visibles las filas duplicadas. Mantenga visible un conflicto entre dos filas para una misma identidad. Después aplique las reglas de su proyecto. Conserve las filas fallidas en el comprobante cuando seleccione las filas útiles.

El significado del salario queda fuera de este método. Las reglas sobre la idoneidad para el puesto quedan fuera de este método. Este método no envía postulaciones. Un cronograma posterior es una decisión nueva. Este artículo no inicia una recolección repetida.

7. Arme un comprobante terminado

La historia de esta sección es ficción original. No es una salida de una prueba en vivo. No es un resultado de producto. Los ID, las URL y los tiempos se inventaron para la enseñanza. No solicite estas URL de la historia. No trate las filas como filas reales de Naukri.

La ejecución de ficción R1 usa el cuerpo didáctico de la sección de inicio. La solicitud de la historia es un POST a `https://api.apify.com/v2/acts/chronometrica~naukri-jobs-scraper/runs` con `Content-Type: application/json`. La respuesta de inicio de la historia incluye `data.id` "R1". No incluye filas de empleo.

R1 termina más tarde con el estado `SUCCEEDED`. El ID del dataset de la historia es D1. El ID del almacén de la historia es K1. El registro guardado de la ejecución en la historia se ve así:

json
{
  "data": {
    "id": "R1",
    "status": "SUCCEEDED",
    "buildId": "fiction-build",
    "startedAt": "2026-04-01T09:00:00Z",
    "finishedAt": "2026-04-01T09:05:00Z",
    "defaultDatasetId": "D1",
    "defaultKeyValueStoreId": "K1"
  }
}
7. Arme un comprobante terminado

El registro OUTPUT de la historia es:

json
{
  "rowsSaved": 2,
  "requestedMaxItems": 2,
  "failedRequests": 0,
  "stopReason": "max_items_reached"
}
7. Arme un comprobante terminado

En esta historia, `blockedRequests`, `searchesQueued`, `searchesFinished`, `pagesRequested` y `sourceStates` no aparecen en ese registro OUTPUT. Déjelos como desconocidos. No escriba 0 para ellos. `failedRequests` es 0 porque la historia dice que no hubo solicitudes fallidas. Ese 0 es conocido.

La primera lectura del dataset usa offset 0 y limit 2. Devuelve este arreglo:

json
[
  {
    "jobId": "000101",
    "jobUrl": "https://www.naukri.com/example-fiction/000101",
    "sourceUrl": "https://www.naukri.com/example-fiction/search",
    "searchTerm": "data analyst",
    "searchLocation": "Bengaluru",
    "source": "naukri.com",
    "observedAt": "2026-04-01T09:04:00Z"
  },
  {
    "jobId": "000102",
    "jobUrl": "https://www.naukri.com/example-fiction/000102",
    "sourceUrl": "https://www.naukri.com/example-fiction/search",
    "searchTerm": "data analyst",
    "searchLocation": "Bengaluru",
    "source": "naukri.com",
    "observedAt": "2026-04-01T09:04:00Z"
  }
]
7. Arme un comprobante terminado

El conteo devuelto es 2. Estas filas de la historia no incluyen `postedAt`. La hora de publicación es desconocida. No es 0. La lectura siguiente usa offset 2 y limit 2. Devuelve:

json
[]
7. Arme un comprobante terminado

El conteo devuelto es 0. Las filas leídas son 2. `rowsSaved` es 2. Los conteos coinciden: 2 es igual a 2. Los ID de origen conocidos son `naukri:000101` y `naukri:000102`. Son dos ID conocidos. Los ceros iniciales permanecen en el texto. Ambas filas conservan la URL de origen de la historia, los campos de consulta en bruto y `observedAt`. El tope significa dos avisos observados. No significa que Bengaluru tenga solo dos empleos abiertos.

Una parte posterior de la misma ficción es la ejecución R2. La historia dice que R2 devuelve de nuevo `000102` y devuelve `000103`. No da un registro OUTPUT separado. No invente `stopReason` ni conteos de solicitudes para R2. Sus dos filas de la historia son:

json
[
  {
    "jobId": "000102",
    "jobUrl": "https://www.naukri.com/example-fiction/000102",
    "sourceUrl": "https://www.naukri.com/example-fiction/search",
    "searchTerm": "data analyst",
    "searchLocation": "Bengaluru",
    "source": "naukri.com",
    "observedAt": "2026-04-08T09:04:00Z"
  },
  {
    "jobId": "000103",
    "jobUrl": "https://www.naukri.com/example-fiction/000103",
    "sourceUrl": "https://www.naukri.com/example-fiction/search",
    "searchTerm": "data analyst",
    "searchLocation": "Bengaluru",
    "source": "naukri.com",
    "observedAt": "2026-04-08T09:04:00Z"
  }
]
7. Arme un comprobante terminado

Guarde ambas filas de R2 como observaciones nuevas. Solo `naukri:000103` es un ID de origen conocido nuevo. `naukri:000102` ya es conocido.

La aritmética usa conteos simples:

  • Observaciones de R1 = 2.
  • Observaciones de R2 = 2.
  • Todas las observaciones = 2 + 2 = 4.
  • ID conocidos después de R1 = 2.
  • ID conocido nuevo en R2 = 1.
  • ID conocido repetido en R2 = 1.
  • ID conocidos después de ambas ejecuciones = 2 + 1 = 3.
  • ID sin resolver en estas cuatro filas = 0, porque cada fila de la historia tiene un `jobId`.

Cuatro observaciones no son cuatro empleos. Tres ID de origen conocidos no son tres empleos de empleadores. La historia no tiene una correspondencia separada entre empleadores. No prueba tres vacantes.

7. Arme un comprobante terminado
ComprobaciónConteo
Observaciones de R12
Observaciones de R22
Todas las observaciones4
ID de origen conocidos3
ID conocido nuevo en R21
ID conocido repetido en R21
ID sin resolver en las cuatro filas0
Empleos de empleador demostradosno se muestra

Una comprobación extra de ficción no forma parte de esas cuatro filas. Si una descarga repite `000102` en la misma página, registre el duplicado. No cree una segunda identidad. El ID conocido sigue siendo `naukri:000102`. Si otra fila de la historia tiene título pero no tiene `jobId`, sume 1 al conteo de ID sin resolver. No cree una clave como `naukri:unknown`.

Entregue a su proyecto las filas en bruto, los ID de ejecución y este comprobante. Agregue una nota breve de que las filas vinieron de páginas públicas de Naukri a través de este Actor. Agregue el momento de `observedAt`. Después el proyecto puede usar la muestra. El tope no es un mercado completo.

Fuentes y lecturas adicionales

Por Chronometrica · Actualizado

Volver arriba ↑