¿Es posible rastrear el portal de trabajo K?

힘센캥거루
2025년 5월 28일(수정됨)
3
54

Recientemente, al ver que el portal de trabajo K muestra los títulos de los documentos oficiales en intervalos de 3 meses, pensé en esto.

¿Y si recopilamos todos los títulos de documentos oficiales mediante crawling y los organizamos en un archivo de Excel de 3 años?

Parecía que sería posible buscar fácilmente los números de documentos oficiales utilizando un filtro.

Pero la conclusión es que fue imposible.

¿Es posible rastrear el portal de trabajo K?-1

1. Todo el mundo tiene un plan.

Este era mi gran plan.

1. Utilizar Selenium de Python para acceder y iniciar sesión en el portal de trabajo.
2. Usar xpath para recopilar las filas y celdas dentro de la etiqueta table y convertirlo en un DataFrame.
3. Utilizar datetime y delta para calcular las fechas y recopilar los documentos cada 3 meses.
4. Colocar los datos en Excel o Google Sheets y usarlos adecuadamente.

Sin embargo, al ingresar al portal de trabajo, no pude encontrar ni una tabla ni un iframe.

Después de 4 horas de intentarlo, escribo sobre por qué el crawling fue imposible.

2. ¿Tu seguridad?

1. WebDRM

¿Es posible rastrear el portal de trabajo K?-2

La primera barrera fue WebDRM.

Debido a esto, no podía activar el modo desarrollador.

Sin embargo, descubrí que si el modo desarrollador ya estaba activado, se mantenía al acceder al sitio.

Finalmente logré activar el modo desarrollador.

2. ¿Se ve en el navegador pero no hay elementos?

Esta parte fue la más difícil de entender.

Aunque los elementos eran claramente visibles en el modo desarrollador, al usar page_source con ChromeDriver, no aparecía ninguno.

Esto sucedía tanto con Selenium como con Puppeteer.

Lo más sorprendente es que incluso usando JavaScript en la consola, los elementos no aparecían.

Esa sensación de estar cerca pero no encontrarlo me volvió loco.

const puppeteer = require('puppeteer');
const fs = require('fs');
// Script para obtener el HTML de una página web usando Puppeteer

(async () => {
  let browser;
  try {
    browser = await puppeteer.launch({
      headless: false,
      args: ['--no-sandbox', '--disable-setuid-sandbox'],
      defaultViewport: null,
      userDataDir: './user_data',
    });

    const page = await browser.newPage();

    await page.goto('https://klef.goe.go.kr/keris_ui/main.do', {
      waitUntil: 'networkidle0', // Esperar hasta que todos los recursos estén cargados
      timeout: 60000, // Esperar hasta 60 segundos
    });

    const html = await page.content();
    fs.writeFileSync('schoolDoc.html', html, 'utf8');
    console.log('HTML guardado como schoolDoc.html.');

  } catch (error) {
    console.error('Error:', error);
  } finally {
    if (browser) await browser.close();
  }
})();

Al reabrir el archivo guardado, vi algo así.

No aparecía la tabla que buscaba, solo el módulo de inicio de sesión.

¿Es posible rastrear el portal de trabajo K?-3

Al pensar por qué sucedía esto, llegué a la conclusión de que la tabla que muestra los documentos oficiales podía no ser parte de un programa instalado por separado.

Con ese pensamiento, fue más fácil rendirse.

3. El portal de trabajo usa websockets.

El portal de trabajo no envía datos a través de una API REST convencional, sino que usa websockets para interactuar con el usuario.

Esto me resultó muy interesante.

¿Es posible rastrear el portal de trabajo K?-4

Por ello, al intentar copiar cookies y establecer una nueva conexión con bibliotecas como requests, fue imposible debido al proceso de handshake y manejo de sesión de los websockets.

Pero no podía rendirme aquí.

Decidí usar selenium-wire para examinar las solicitudes y respuestas realizadas a través del websocket.

# Iterar sobre las solicitudes
for request in driver.requests:
    if request.response:
        content_type = request.response.headers.get('Content-Type', '')
        if content_type.startswith('application/json'):
            print("== URL de Solicitud:", request.url)
            try:
                body = request.response.body.decode('utf-8', errors='ignore')
                print("== Contenido de Respuesta:", body)
            except Exception as e:
                print("== Error de Decodificación:", e)

driver.quit()

Entonces, aparecieron algunas letras que parecían estar codificadas en base64.

Intenté decodificarlas, pero fallé ya que no cumplían con el formato.

Aquí decidí dejarlo.

3. Conclusiones

Aunque me quejaba de la lentitud de los sitios de las instituciones públicas, después de investigar, parece que su seguridad está bien implementada.

No fue fácil obtener datos de forma remota, y aprendí mucho gracias a ello.

Sin embargo, creo que intentaré de nuevo en el futuro.

¿Es posible rastrear el portal de trabajo K?-5

관련 글

Automatización de tareas escolares: revisión del boletín de vida escolar con IA – Detalles de competencias por asignatura
Automatización de tareas escolares: revisión del boletín de vida escolar con IA – Detalles de competencias por asignatura
Si tuviera que escoger la tarea más insignificante, dura y aburrida en la escuela, elegiría la revisión del boletín de vida escolar.En secundaria el b...
Reseña de lectura y experiencia del desafío del capítulo 7 de "밑바닥부터 만들면서 배우는 LLM"
Reseña de lectura y experiencia del desafío del capítulo 7 de "밑바닥부터 만들면서 배우는 LLM"
El contenido del capítulo 7 trata sobre el proceso de ajustar finamente el modelo para que siga instrucciones.Es hacer que responda como se espera ant...
Reseña de lectura del capítulo 6 de "Aprendiendo LLM desde cero"
Reseña de lectura del capítulo 6 de "Aprendiendo LLM desde cero"
El capítulo 6 trata sobre el fine-tuning para clasificación.El ejemplo que aparece es la creación de un clasificador de spam.Como el clasificador de s...
Reseña de lectura del capítulo 5 de «Aprender LLM construyéndolo desde cero»
Reseña de lectura del capítulo 5 de «Aprender LLM construyéndolo desde cero»
Hoy es 14 de diciembre.En realidad, el período del desafío ya terminó hace 2 semanas, pero aun así no podía renunciar a escribir la reseña.Porque esto...
Aprendiendo a crear un LLM desde cero – Reseña del capítulo 4
Aprendiendo a crear un LLM desde cero – Reseña del capítulo 4
Hoy es 26 de noviembre, así que si leo un capítulo al día, habré completado el reto.No sé si será posible con las interrupciones del primero y del seg...
Reseña de la lectura del capítulo 3 de LLM aprendiendo desde cero
Reseña de la lectura del capítulo 3 de LLM aprendiendo desde cero
Después de derramar agua sobre mi MacBook, entré en crisis y perdí alrededor de 3 a 4 días. Ahora que lo pienso, debería haber hecho algo, pensando que mi MacBook ya estaba arruinada y que la mandaría a reparar de todas formas. Aunque estoy un poco atrasado, quiero dejar mi reseña del capítulo 3 porque creo que debo continuar hasta el final. 1. Mecanismo de atención Capítulo 3...

댓글을 불러오는 중...