CursosEmpresasBlogLiveConfPrecios

In-text search en Xpath

Clase 13 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 min
  • 2
    ¿Por qué aprender web scraping hoy?

    ¿Por qué aprender web scraping hoy?

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

    Python: el lenguaje más poderoso para extraer datos

    03:21 min

Fundamentos de la web

  • 4
    Entender HTTP

    Entender HTTP

    07:02 min
  • 5
    ¿Qué es HTML?

    ¿Qué es HTML?

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

    Robots.txt: permisos y consideraciones al hacer web scraping

    05:41 min

XML Path Language

  • 7
    XML Path Language

    XML Path Language

    03:35 min
  • 8
    Tipos de nodos en XPath

    Tipos de nodos en XPath

    05:18 min
  • 9
    Expresiones en XPath

    Expresiones en XPath

    08:18 min
  • 10
    Predicados en Xpath

    Predicados en Xpath

    05:34 min
  • 11
    Operadores en Xpath

    Operadores en Xpath

    05:51 min
  • 12
    Wildcards en Xpath

    Wildcards en Xpath

    06:11 min
  • 13
    In-text search en Xpath

    In-text search en Xpath

    Viendo ahora
  • 14
    XPath Axes

    XPath Axes

    05:16 min
  • 15

    Resumen de XPath

    00:01 min
  • 16
    Aplicando lo aprendido

    Aplicando lo aprendido

    08:52 min

Proyecto: scraper de noticias

  • 17
    Un proyecto para tu portafolio: scraper de noticias

    Un proyecto para tu portafolio: scraper de noticias

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

    Construcción de las expresiones de XPath

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

    Obteniendo los links de los artículos con Python

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

    Guardando las noticias en archivos de texto

    14:53 min

Conclusiones

  • 21
    Cómo continuar tu ruta de aprendizaje

    Cómo continuar tu ruta de aprendizaje

    02:13 min
  • Tomar el examen del curso
    • Alejandro Giraldo Londoño

      Alejandro Giraldo Londoño

      student•
      hace 5 años

      RESMEN:In text Search

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

      Para buscar cadenas de caracteres especificas dentro de un texto.

      • start-with(."Texto a buscar"): Empezar con, el punto hace referencia al nodo actual.
      $x('//small[@class="author" and starts-with(.,"A")]/text()').map(x => x.wholeText) #Devuelve (4) ["Albert Einstein", "Albert Einstein", "Albert Einstein", "André Gide"]
      • contains (., "Texto a buscar") : Sirve para llamar por el texto contenido en.
      $x('//small[@class="author" and contains(., "g")]/text()').map(x => x.wholeText) #Devuelve ["J.K. Rowling"]

      Nota: Debido a las versiones del lenguaje Xpath en los navegadores las funciones end-with y matches no están disponibles, pero una ve en código python corren sin problemas.


      • end-with(.,""): Termina en.
      • matches(.,""): Sirve para hacer una búsqueda en el texto de un nodo que coincida con una expresión regular.
        David Amador Morales

        David Amador Morales

        student•
        hace 5 años

        Alejandro, nuevamente, gracias por el resumen.

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Qué bien, buscamos bytes especificos en el texto.

      Angel Francisco Flores Ayala

      Angel Francisco Flores Ayala

      student•
      hace 5 años

      Los parametros que necesitan las siguientes funciones son haystack, el string donde se va a buscar (o el nodo), y una cadena de texto a buscar (o un patron).

      • starts-with(haystack, "first text") - Trae todos lo elementos que tienen como una cadena de texto que comience con el parámetro introducido.
      • contains(haystack, "some string") - Trae todos los elementos que contengan la cadena de texto introducida.

      Las siguientes funciones no funcionan en el motor de JS del navegador ya que este usa la version 1.0 de XPath, mientras que las funciones corresponden a la v2.0

      • ends-with(haystack , "final") -
      • matches(haystack, Regular expresion) - Hace uso de expresiones regulares para buscar strings.
      Eduardo Mejia

      Eduardo Mejia

      student•
      hace 5 años

      este curso esta super interesante, nuestro sensei en verdad que sabe bastante

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Seee, tenemos demasiados usos.

      César Ernesto Rivas Martínez

      César Ernesto Rivas Martínez

      student•
      hace 6 años
      $x('//small[@class="author" and @itemprop="author" and starts-with(., "A")]/node()').map(x => x.wholeText)
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Bien !

      Luis Rogelio Reyes Hernandez

      Luis Rogelio Reyes Hernandez

      student•
      hace 5 años
      // traer todos los autores que tienen un nombre que comienza por la letra A $x('//small[@class="author" and starts-with(., "A")]/text()') // starts-with(., "A") el "." punto es para referirse al nodo actual , y A es el texto con que se compara que comienze $x('//small[@class="author" and starts-with(., "A")]/text()').map(x=>x.wholeText) // viendo el texto de los autores que inician con la letra A // autores que el nombre contenga Ro $x('//small[@class="author" and contains(., "Ro")]') $x('//small[@class="author" and contains(., "Ro")]/text()').map(x=>x.wholeText) // viendo el texto // autores que terminan en t $x('//small[@class="author" and ends-with(., "t")]/text()') // esta función no funcionara en el navegador ya que en los navegadores esta xpath 1.0 y ends-with se agrego en xpath 2.0 // usando expreciones regulares $x('//small[@class="author" and matches(., "A.*n")]/text()') // inicia con la letra A y termina con la letra n , tambien de xpath 2.0
        Jason Maximiliano Pinelo Hau

        Jason Maximiliano Pinelo Hau

        student•
        hace 4 años

        Muchísimas gracias por tus resumenes!

        Jesús Zelaya Contreras

        Jesús Zelaya Contreras

        student•
        hace 4 años

        Gracias ! Buen resumen

      Carolina Acosta Muñoz

      Carolina Acosta Muñoz

      student•
      hace 5 años

      Ejemplos de búsquedas dentro del texto bajo ciertas condiciones

      $x('//small[@class="author" and starts-with(.,"A")]/text()').map(x=> x.wholeText) <- busca todos los nodos de tipo small (//small), que cumplan clase "author" y empiecen con "A" (el . inicial es para buscar en el nodo actual), luego /text() para que nos devuelva el texto encontrado y con map lo podamos ver de manera textual. $x('//small[@class="author" and contains(.,"Ro")]/text()').map(x=> x.wholeText) <- Con contains trae todos los autores que tengan en su nombre "Ro" $x('//small[@class="author" and end-with(.,"n")]/text()').map(x=> x.wholeText) <- Aunque no funciona en el navegador, ends-with se escribe igual que starts-with y en python sí funciona. $x('//small[@class="author" and matches(.,"A.*n")]/text()').map(x=> x.wholeText) <- Con matches, aunque tampoco es soportada por el navegador, realiza una busqueda en el texto de un nodo que coincida con cierta expresión regular en este caso "A.*n" que empiece con A y termine con n

      Kennedy ${{7*7}} Sanchez ${7*7}

      Kennedy ${{7*7}} Sanchez ${7*7}

      student•
      hace 6 años

      La busqueda no es case sensitive?

      En caso de hacer una busqueda general como (A|a) aplicaria en este caso?

        Juan David Colorado Alvarez

        Juan David Colorado Alvarez

        student•
        hace 6 años

        El problema esta en que los navegadores solo soportan la version 1.0 de XPath, lo que hace que funciones como: matches o lower-case no estén disponibles, Por lo que tiene tendrías hacer algo más manual, o “prefiltrar” con XPath y luego en el lenguaje que estés usando volver a filtrar con una expresión regular. Esta sería la forma manual.

        $x("//small[@class='author' and (starts-with(., 'A') or starts-with(., 'a'))] ")

      Nadir Baca Paunero

      Nadir Baca Paunero

      student•
      hace 3 años

      Porque no me estaria escribiendo el texto??

      $x('//small[@class="author" and starts-with(.,"A")]').map( x=> x.wholeText) (4) [undefined, undefined, undefined, undefined]
      $x('//small[@class="author" and starts-with(.,"A")]/text()').map( x=> x.wholeText) []
        Daniel  Higuera

        Daniel Higuera

        student•
        hace 3 años

        me pasa lo mismo, tal vez es porque los sitios web van cambiando, hay nuevas maneras de hacer eso

        Nadir Baca Paunero

        Nadir Baca Paunero

        student•
        hace 3 años

        si lo borras y lo intentas de vuelta por ahi lo agarra

      Andrés Zambrano

      Andrés Zambrano

      student•
      hace 5 años

      It is better to be hated for what you are than to be loved for what you are not.

      $x('//span[@class="text" and contains(., "love")]/text()').map(x => x.wholeText)```
      Luis Fernando Úbeda Camacho

      Luis Fernando Úbeda Camacho

      student•
      hace 6 años

      $x('//small[@class="author" and starts-with(., "A")]'): Para extraer los nombres de autores que empiezan por A.

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Buenisimo !

      Santiago Gomez Florez

      Santiago Gomez Florez

      student•
      hace 6 años
      $x('//*[@class="author" and @itemprop="author" and starts-with(., "A") ]/node()').map(x => x.wholeText)```
      Juan Fernando Moyano Ramírez

      Juan Fernando Moyano Ramírez

      student•
      hace 5 años

      Hola a todos, os dejo mis apuntes de esta clase, sin embargo, he creado un respositorio en github donde estan todos los apuntes de este curso: https://github.com/fer2002743/web-scraping

      <h2>In-text search en Xpath</h2>

      En esta clase vamos a aprender a buscar lo que queremos dentro del text.

      Supongamos que quiero traer todos los autores que comienzan por determinada letra, por ejemplo la letra A, para ello hago lo siguiente:

      $x('//small[@class="author" and starts-with(., "A")]') #dentro de starts-with el punto significa que busque en el nodo actual, y la letra entre comillas significa la letra

      Pero esto no es todo, tambien podemos usar la funcion contains de la siguiente manera:

      $x('//small[@class="author" and contains(., "RO")]')

      Por otro lado, tambien podemos seleccionar lo que queremos fijandonos en las letras finales:

      $x('//small[@class="author" and ends-with(.,"ing")]') #en el navegador me va a salir error porque en los navegadores usan la version 1.0 de XPath, y esta funcion esta en la version 2.0, sin embargo, cuando ejeccute esta funcion en python no tendre ningun problema

      Matches la utilizamos para encontrar un texto en un nodo que coincida con cierta expresion regular.

      $x('//small[@class="author" and matches(., "A.n*")]') #esto selecciona los nombres que empiezan con A y terminan en n
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Gracias por tus apuntes.

      LINDA JHENNIFER ACOSTA LEGUIZAMO

      LINDA JHENNIFER ACOSTA LEGUIZAMO

      student•
      hace 5 años

      Starts-with y ends-with para buscar coincidencias

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Coincidencias de bytes específicos .

      Francisco Garcia [C6]

      Francisco Garcia [C6]

      student•
      hace 5 años

      que bien

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Perfecto !!

      Carlos Javier Guevara Contreras

      Carlos Javier Guevara Contreras

      student•
      hace 5 años

      Muy Util

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Demasiado

      Germán Antonino Corona Aguilar

      Germán Antonino Corona Aguilar

      student•
      hace 5 años

      Puede que para ustedes no sea nuevo, pero puedes poner tantos "and" como te de la gana.

      $x('//small[@class="author" and @itemprop="author" and starts-with(.,"A")]/text()').map(x => x.wholeText) (4) ["Albert Einstein", "Albert Einstein", "Albert Einstein", "André Gide"]
      Edward Toledo López

      Edward Toledo López

      student•
      hace 5 años

      $x('//small[@class="author" and contains(., "Ro") or contains(., "ro")]/text()').map(x => x.wholeText)

      Juan David Suarez

      Juan David Suarez

      student•
      hace 5 años
      $x('//div/a[@class="tag" and (contains(., "love") or contains(., "inspirational")) ]/text()')

      Encontrar los tags que contengan "love" o "inspirational"

      Martin DAVILA

      Martin DAVILA

      student•
      hace 5 años
      "In-text serch" $x('//small[@class="author and starts-whit(.,"A"')]/text()').map(x => x.wholeText) $x('//small[@class="author and emds-whit(.,"A"')]/text()').map(x => x.wholeText) $x('//small[@class="author and match(.,"A"')]/text()').map(x => x.wholeText)```
      Luis Enrique Noguera Gil

      Luis Enrique Noguera Gil

      student•
      hace 3 años

      ¿Cómo se puede extraer el texto de un párrafo cuando este cuenta con span o em?

      Este es el fragmento del código HTML:

      <p>Reference: “A microneedle vaccine printer for thermostable <span class="glossaryLink" aria-describedby="tt" data-cmtooltip="<div class=glossaryItemTitle>COVID-19</div><div class=glossaryItemBody>First identified in 2019 in Wuhan, China, COVID-19, or Coronavirus disease 2019, (which was originally called &amp;quot;2019 novel coronavirus&amp;quot; or 2019-nCoV) is an infectious disease caused by severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2). It has spread globally, resulting in the 2019–22 coronavirus pandemic.</div>" data-gt-translate-attributes="[{&quot;attribute&quot;:&quot;data-cmtooltip&quot;, &quot;format&quot;:&quot;html&quot;}]">COVID-19</span> mRNA vaccines” by Aurélien vander Straeten, Morteza Sarmadi, John L. Daristotle, Maria Kanelli, Lisa H. Tostanoski, Joe Collins, Apurva Pardeshi, Jooli Han, Dhruv Varshney, Behnaz Eshaghi, Johnny Garcia, Timothy A. Forster, Gary Li, Nandita Menon, Sydney L. Pyon, Linzixuan Zhang, Catherine Jacob-Dolan, Olivia C. Powers, Kevin Hall, Shahad K. Alsaiari, Morris Wolf, Mark W. Tibbitt, Robert Farra, Dan H. Barouch, Robert Langer and Ana Jaklenec, 24 April 2023, <em>Nature Biotechnology</em>.<br><a href="https://www.nature.com/articles/s41587-023-01774-z">DOI: 10.1038/s41587-023-01774-z</a></p>

      Con el código Xpath

      $x('/html/body/div[3]/div/div/article/div/p[22]//text()').map(x => x.wholeText)

      Se tiene el arreglo:

      ['Reference: “A microneedle vaccine printer for thermostable ', 'COVID-19', ' mRNA vaccines” by Aurélien vander Straeten, Morte…, Robert Langer and Ana Jaklenec, 24 April 2023, ', 'Nature Biotechnology', '.', 'DOI: 10.1038/s41587-023-01774-z']

      Me interesa tenerlo todo junto en un mismo String, y de ser posible desde la sentencia xPath. Lo he intentado desde python, pero depende de la posición donde se encuentre cada elemnto si es posible o no fusionarlo de forma coherente con el texto. No me gustaría procesar párrafo por párrafo😅, sólo como último recurso.

      ¿Alguien tendría alguna idea?

    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