CursosEmpresasBlogLiveConfPrecios

Aplicando lo aprendido

Clase 16 de 21 • Curso de Fundamentos de Web Scraping con Python y Xpath

Clase anteriorSiguiente clase

Contenido del curso

Introducción al web scraping
  • 1
    ¿Qué es el web scraping?

    ¿Qué es el web scraping?

    02:06
  • 2
    ¿Por qué aprender web scraping hoy?

    ¿Por qué aprender web scraping hoy?

    03:05
  • 3
    Python: el lenguaje más poderoso para extraer datos

    Python: el lenguaje más poderoso para extraer datos

    03:21
Fundamentos de la web
  • 4
    Entender HTTP

    Entender HTTP

    07:02
  • 5
    ¿Qué es HTML?

    ¿Qué es HTML?

    08:08
  • 6
    Robots.txt: permisos y consideraciones al hacer web scraping

    Robots.txt: permisos y consideraciones al hacer web scraping

    05:41
XML Path Language
  • 7
    XML Path Language

    XML Path Language

    03:35
  • 8
    Tipos de nodos en XPath

    Tipos de nodos en XPath

    05:18
  • 9
    Expresiones en XPath

    Expresiones en XPath

    08:18
  • 10
    Predicados en Xpath

    Predicados en Xpath

    05:34
  • 11
    Operadores en Xpath

    Operadores en Xpath

    05:51
  • 12
    Wildcards en Xpath

    Wildcards en Xpath

    06:11
  • 13
    In-text search en Xpath

    In-text search en Xpath

    08:21
  • 14
    XPath Axes

    XPath Axes

    05:16
  • 15

    Resumen de XPath

    00:01
  • 16
    Aplicando lo aprendido

    Aplicando lo aprendido

    08:52
Proyecto: scraper de noticias
  • 17
    Un proyecto para tu portafolio: scraper de noticias

    Un proyecto para tu portafolio: scraper de noticias

    10:08
  • 18
    Construcción de las expresiones de XPath

    Construcción de las expresiones de XPath

    10:29
  • 19
    Obteniendo los links de los artículos con Python

    Obteniendo los links de los artículos con Python

    10:56
  • 20
    Guardando las noticias en archivos de texto

    Guardando las noticias en archivos de texto

    14:53
Conclusiones
  • 21
    Cómo continuar tu ruta de aprendizaje

    Cómo continuar tu ruta de aprendizaje

    02:13
    Oscar Castillo

    Oscar Castillo

    student•
    hace 5 años

    Una opción que descubrí mientras hacía debuging de la expresión Xpath para el Stock Availability, fue copiar la ruta Xpath directamente desde el código HTML en Google Chrome, de la siguiente manera:

    1. Con la flecha del inspector de elementos, selecciona el punto al que te gustaría hacerle scrapping. Ello te llevará al punto en el código HTML para que investigues su ruta.
    2. Al hacer click derecho sobre esa porción de código HTML, selecciona Copy y luego Copy Xpath .
      Xpath.png
      .
    3. Luego copialo en la cónsola y sólo tendrías que adaptarle el formato para que lo obtengas como deseas.

    IMPORTANTE: Al usar este método puedes perder legibilidad del código, lo que podría dificultar la colaboración de otro compañero y/o dificultar que puedas mantener el código tiempo después. Por lo que lo vería más como un complemento que como una solución definitiva para Xpath.

      Kenny Emmanuel Lajara Aquino

      Kenny Emmanuel Lajara Aquino

      student•
      hace 5 años

      **Otra nota importante: ** Usa esto si tienes que entregar un proyecto en tiempo record, pero si lo que buscas es aprender y/o escribir código de alta calidad, continúa escribiéndolo a mano.

      Francisco Garcia [C6]

      Francisco Garcia [C6]

      student•
      hace 5 años

      Que buen tip

    Angel Francisco Flores Ayala

    Angel Francisco Flores Ayala

    student•
    hace 5 años

    No existe una única forma de resolver el reto, y de hecho puede reducirse muchisimo el tamaño de la expresión si identificamos lo indispensable, tal como en el caso del stock en el siguiente ejemplo:

    //Description $x('//article[@class="product_page"]/p/text()').map(x=>x.wholeText) //Stock available $x('//article[@class="product_page"]/div[@class="row"]/div[@class="col-sm-6 product_main"]/p[@class="instock availability"]/text()[2]').map(x=>x.wholeText) $x('//p[@class="instock availability"]/text()[2]').map(x=>x.wholeText)```
      Bryan David Rosas Rojas

      Bryan David Rosas Rojas

      student•
      hace 5 años

      De acuerdo, existen muchas formas de hacerlo, comparto el que yo realicé que requiere de menor cantidad de predicados [@class]: $x(’//table[@class=“table table-striped”]/tbody/tr/td[starts-with(.,“In”)]/text()’).map(x => x.wholeText)

      David Antonio Valverde Figueroa

      David Antonio Valverde Figueroa

      student•
      hace 5 años

      Para la descripción, al poner un [0] al final del código, se puede observar la descripción completa.

    Alejandro Giraldo Londoño

    Alejandro Giraldo Londoño

    student•
    hace 5 años

    RESUMEN :

    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

    • Realizar expresiones Xpath para:
    • Descripción:
    $x('//article/p/text()').map(x => x.wholeText) ["It's hard to imagine a world without A Light in th…for you. Shel, you never sounded so good. ...more"]
    • Stock
    $x('//article[@class="product_page"]//p[@class="instock availability"]/text()').map(x=>x.wholeText)
    • Precio
    $x('//article[@class="product_pod"]/div[@class="product_price"]/p[@class="price_color"]/text()').map(x=>x.wholeText) #Devuelve: (20) ["£51.77", "£53.74", "£50.10", "£47.82", "£54.23", "£22.65", "£33.34", "£17.93", "£22.60", "£52.15", "£13.99", "£20.66", "£17.46", "£52.29", "£35.02", "£57.25", "£23.88", "£37.59", "£51.33", "£45.17"]
    • Barra lateral izquierda categorías :
    $x('//div[@class="side_categories"]//a[@href]/text()').map(x=>x.wholeText)
    Luis Rogelio Reyes Hernandez

    Luis Rogelio Reyes Hernandez

    student•
    hace 5 años
    // ejemplos de https://books.toscrape.com/index.html $x('//article[@class="product_pod"]/h3/a/@title') // trayendo todos los titulos de los libros $x('//article[@class="product_pod"]/h3/a/@title').map(x => x.value) $x('//article[@class="product_pod"]/div[@class="product_price"]/p[@class="price_color"]/text()') // tdoos los precios de los libros $x('//article[@class="product_pod"]/div[@class="product_price"]/p[@class="price_color"]/text()').map(x => x.wholeText) $x('//div[@class="side_categories"]/ul[@class="nav nav-list"]/li/ul/li/a/text()') // todas las categorias de libros $x('//div[@class="side_categories"]/ul[@class="nav nav-list"]/li/ul/li/a/text()').map(x => x.wholeText.trim()) // RETO /* Extraer descripcion de libros https://books.toscrape.com/catalogue/sapiens-a-brief-history-of-humankind_996/index.html */ $x('//article[@class="product_page"]/p[position()=1]/text()') $x('//article[@class="product_page"]/p[position()=1]/text()')[0].wholeText /* Extraer stock de libros */ $x('//table[@class="table table-striped"]/tbody/tr/td/.')[5] $x('//table[@class="table table-striped"]/tbody/tr[6]/td/text()')[0].wholeText
      Italo Buitron

      Italo Buitron

      student•
      hace 4 años

      el .trim me salvó la vida, muchas gracias! (de donde sacaste ese comando?)

    Natalia Caro Barrios

    Natalia Caro Barrios

    student•
    hace 5 años

    Para obtener las categorías de libros limpias podemos usar una expresión regular.

    $x('//div[@class="side_categories"]/ul[@class="nav nav-list"]/li/ul/li/a/text()').map(i => i.data.replace(/[_\W]+/g, ""))
    Alfonso Morán

    Alfonso Morán

    student•
    hace 5 años

    Me surge la duda de ¿cómo saber a partir de dónde empezar? veo que se puede emepzar desde el div, o del article, o desde p.

      Diego Forero

      Diego Forero

      Team Platzi•
      hace 5 años

      Debes analizar la estructura del sitio web al cual le quieres hacer scraping, dependiendo de su estructura html tu decides de donde iniciar.

      Jaime Andres Valencia Gaviria

      Jaime Andres Valencia Gaviria

      student•
      hace 5 años

      eso es gusto de quien hace el trabajo , pero tambien es buena idea iniciar de tal forma que quede una estructura logica del html

    César Ernesto Rivas Martínez

    César Ernesto Rivas Martínez

    student•
    hace 5 años

    Descripcion

    $x('//article[@class="product_page"]/p/text()').map(x => x.wholeText)

    Stock

    $x('//article[@class="product_page"]/div[@class="row"]/div[@class="col-sm-6 product_main"]/p[@class="instock availability"]/text()').map(x => x.wholeText.trim())
    Ronny Roel Polloqueri Anco

    Ronny Roel Polloqueri Anco

    company_admin•
    hace 5 años

    En el último ejercicio se puede usar $x('//div[@class="side_categories"]/ul[@class="nav nav-list"]/li/ul/li/a/text()').map(x => x.wholeText.trim()) para tener los textos sin espacios innecesarios.

      David Esteban Solorzano Taborda

      David Esteban Solorzano Taborda

      student•
      hace 5 años

      Exacto, es lo mismo que el menciona que es la funcion strip en python, son lo mismo

    Fernando Callasaca Acuña

    Fernando Callasaca Acuña

    student•
    hace 4 años

    Estos fueron mis resultados les comparto por si alguien quiere comprar o si talvez lo hicieron de una manera distinta.

    Stock Available:

    $x('//article[@class = "product_page"]/div[@class = "row"]/div[@class = "col-sm-6 product_main"]/p[@class = "instock availability"]/text()[last()]').map(x => x.wholeText.trim())

    Product Description

    $x('//article[@class = "product_page"]/p/text()').map(x => x.wholeText)
    Matias Nieto

    Matias Nieto

    student•
    hace 5 años

    Como me salio a mi

    Para retornar el stock $x('//p[@class="instock availability"]/text()').map(x => x.wholeText) Para traer la descripcion $x('//article[@class="product_page"]/p/text()').map(x => x.wholeText)```
    Luis Angel Martinez Elizalde

    Luis Angel Martinez Elizalde

    student•
    hace 5 años

    ¿Por qué se hacen los xpath tan largos? Supongo que es para reducir el espacio donde se busca pero aún así creo que se pueden hacer más cortos.

      Luis Lira

      Luis Lira

      student•
      hace 5 años

      Es debido a que el XPath se construye por como está creado todo el DOM, es decir el árbol de elementos y si estos no tiene algún ID específico, te dará toda la ruta desde el elemento más antiguo hasta llegar al que deseas.

      Salvador Cardona Noriega

      Salvador Cardona Noriega

      student•
      hace 5 años

      Simplemente para ser específicos y evitar errores. Pero es verdad, puedes reducir la expresión si estás seguro de lo que buscas.

    Steve Gutierrez

    Steve Gutierrez

    student•
    hace 5 años

    Pregunta porque motivo me sale la siguiente situación:

    $x('//div[@class("side_categories")]/ul[@class="nav nav-list"]/li/ul/li/a/text()').map(x => x.wholeText) Uncaught DOMException: An exception was thrown

      Francisco Javier Cárdenas Ibarra

      Francisco Javier Cárdenas Ibarra

      student•
      hace 4 años

      Hola, he visto lo que has escrito, tu problema es que en el atributo class lo pusiste entre paréntesis como si fuera una función y recuerda que debes igualarlo con el valor entonces quedaría

      //div[@class="side_categories

      Saludos,

    Jesus Eduardo Murrieta Rosas

    Jesus Eduardo Murrieta Rosas

    student•
    hace 4 años

    ¿Y cuando son paginas dinamicas o single pages webs, osea cuando se ocupe dar un click para cargar información y la url no cambia? ¿Cómo se hace?

      Héctor Eduardo López Carballo

      Héctor Eduardo López Carballo

      student•
      hace 4 años

      Requieres un framework que simule la interacción con clicks sobre una web, me parece que Scrappy lo hace. Acá te dejo el curso: Curso de Scrapy

    Daniel Tibavisco

    Daniel Tibavisco

    student•
    hace 4 años

    Si quiero extraer los títulos de los libros no solo de la primera página, sino el total de libros como se realizaría ? ya que son 1000 libros distribuidos en 20 pag

      Thomas Gonzalez Rodrigues

      Thomas Gonzalez Rodrigues

      student•
      hace 3 años

      diría que ya en python con un ciclo for que vaya pagina por pagina

    Orlando Ramirez

    Orlando Ramirez

    student•
    hace 5 años

    Me gustaría agregar que en el primer ejemplo cuando el toma el título del libro, lo hace con el atributo value, esto lo hace porque lo esta tomando directamente de el atributo title="título".
    En el segundo caso, como lo toma directamente del texto que está dentro de p, se usa text()

    Joaquin Villamediana

    Joaquin Villamediana

    student•
    hace 5 años

    Algo interesante que acabo de notar realizando el reto es que si un elemento tiene 2 clases, como por ejemplo "col-sm-6 product_main". Es necesario que al extraerlo con Xpath incluyas ambas clases. Con los css selector se puede tomar por solo una de ellas pero en Xpath no.

      Osvaldo Hinojosa

      Osvaldo Hinojosa

      student•
      hace 5 años

      Es correcto, una funcion que puedes utilizar para evitar escribir las dos clases es "contains"

      //div[contains(@class, "product_main")]
    Rodrigo Rodriguez

    Rodrigo Rodriguez

    student•
    hace 5 años

    Hola a todos, estoy en esta pagina

    https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html ( va http antes)

    quiero seleccionar el primer div del body , el cual su etiqueta es

    <div class="container-fluid page">

    esto esta en html/body me pregunto porque no puedo obtener ese nodo (el primer div) haciendo referencia al contenido de su atributo class, por ejemplo asi :

    $x('/html/body/div[@class="container-fluid"]'),

    si hago esto no devuelve nada,

    Acaso no deberia poder obtener el nodo asi ?? en algo debo estar equivocado porque no lo obtengo.

    Gracias a todos por su ayuda.

      Angel Ivan Carrillo  de Leon

      Angel Ivan Carrillo de Leon

      student•
      hace 5 años

      Es porque tiene 2 clases y lo que estas haciendo es buscando un div con una sola clase lo que tienes que pones es esto

      $x('/html/body/div[@class="container-fluid page"]')

      O tambien podrías poner

      $x('/html/body/div[contains(@class, "container-fluid")]')

      Me gusta más la sintaxis

      $x('//div[contains(@class, "container-fluid")]')<code>

      Espero que te ayude.

      Saludos

      Rodrigo Rodriguez

      Rodrigo Rodriguez

      student•
      hace 5 años

      Gracias angel ivan por tu ayuda, me gusto la idea de //div[contains(@class , "container-fluid")], de hecho ahora si pude obtener lo que buscaba. Abrazo!

    Roger Natividad Pantoja

    Roger Natividad Pantoja

    student•
    hace 3 años

    Para que le salga sin espacion con JS es asi.

    $x('//div[@class="side_categories"]/ul/li/ul/li/a/text()').map(x => x.wholeText.trim())
    Javier Amaya Patricio

    Javier Amaya Patricio

    student•
    hace 3 años

    Challenges XPath 🕵️

    Extract the description of a book 📑

    $x('//article[@class="product_page"]/p/text()').map(x => x.wholeText)

    "WICKED above her hipbone, GIRL across her heart Words are like a road map ..."

    .

    Extract stock from a book 📑

    $x('//div[@class="col-sm-6 product_main"]/p[@class="instock availability"]/text()[2]').map(x => x.wholeText)

    Result= ['\n \n In stock (20 available)\n \n']

    Ayxa Chaverra

    Ayxa Chaverra

    student•
    hace 3 años

    Yo lo hice de la siguiente forma:

    $x('//p[@class="instock availability" and contains(., "stock")] | //div[@id="product_description"]/following-sibling::p').map(x=>x.innerText)

    Y obtuve un array con los dos datos:

    Array [ " In stock (22 available)", "It's hard to imagine a world without A Light in the Attic. This now-classic collection of poetry and drawings from Shel Silverstein celebrates its 20th anniversary with this special edition. Silverstein's humorous and creative verse can amuse the dowdiest of readers. Lemon-faced adults and fidgety kids sit still and read these rhythmic words and laugh and smile and love th It's hard to imagine a world without A Light in the Attic. This now-classic collection of poetry and drawings from Shel Silverstein celebrates its 20th anniversary with this special edition. Silverstein's humorous and creative verse can amuse the dowdiest of readers. Lemon-faced adults and fidgety kids sit still and read these rhythmic words and laugh and smile and love that Silverstein. Need proof of his genius? RockabyeRockabye baby, in the treetopDon't you know a treetopIs no safe place to rock?And who put you up there,And your cradle, too?Baby, I think someone down here'sGot it in for you. Shel, you never sounded so good. ...more" ]

    Por cierto, en este caso aproveché el atributo de innerText de los nodos del DOM para obtener la información en un formato más cercano al que se visualiza en la pantalla.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads