CursosEmpresasBlogLiveConfPrecios

Expresiones en XPath

Clase 9 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

    Viendo ahora
  • 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

    08:21 min
  • 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
    • Angel Francisco Flores Ayala

      Angel Francisco Flores Ayala

      student•
      hace 5 años

      Para escribir expresiones se usara lo siguiente $x(''). Entre las comillas se van a escribir las expresiones, las expresiones tienen diferentes símbolos que tienen una utilidad.

      Se describe la utilidad de cada expresión.

      • / hace referencia a la raíz, o tambien significa un salto entre nodos. e.g /html/bodyMuestra todo lo que hay dentro del body de html
      • // Sirve para acceder a todos los nodos con la etiqueta seleccionada. e.g [*//span](//span) muestra todas las etiquetas span*
      • .. Sirve para acceder a los nodos padre de la etiqueta tag. e.g //span/.. accede a todos los nodos padre de span
      • . Hace referencia al nodo actual. e.g. //span/. es equivalent a //span
      • @ Sirve para traer los atributos. e.g //div/@class Nos da las clases de todos los divs
        César Daniel Carrasco Gutiérrez

        César Daniel Carrasco Gutiérrez

        student•
        hace 4 años

        Muchas gracias es muy útil tu aporte.

        Jeinfferson Bernal G

        Jeinfferson Bernal G

        student•
        hace 3 años

        Gracias por el resumen!

      Juan Sebastián Gómez Moreno

      Juan Sebastián Gómez Moreno

      student•
      hace 5 años

      Cuando deban hacer una búsqueda a gran escala, una herramienta que les puede ayudar es la extensión en chrome de xPath Finder. OJO, esta extensión les va a decir el xpath de lo que están buscando, pero no es un reemplazo total a lo que aprendemos acá. Por eso aclaro que úsenla cuando deban buscar muchos paths, de lo contrario háganlo manual.

      Quien quiera agregar la extensión a su navegador acá dejo el link:

      https://chrome.google.com/webstore/detail/xpath-finder/ihnknokegkbpmofmafnkoadfjkhlogph

        jaime linares

        jaime linares

        student•
        hace 5 años

        Gracias

      Juan David Colorado Alvarez

      Juan David Colorado Alvarez

      student•
      hace 6 años

      Si desean ver directamente el elemento en la página y verificar su expresión. Se puede usar en la pestaña de Elements el comando Ctrl + F y poniendo directamente la expresión, el navegador de muestra el elemento en concreto. Por ejemplo: //h1/a/text()

      scrape_platzi.png
        Wilson Delgado

        Wilson Delgado

        student•
        hace 5 años

        Gracias!

        David Amador Morales

        David Amador Morales

        student•
        hace 5 años

        Buen aporte, Juan David.

      Alejandro Giraldo Londoño

      Alejandro Giraldo Londoño

      student•
      hace 5 años

      RESUMEN: Expresiones en Xpath ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

      • / : Significa la raiz o root de todo el documento, tambien significa un salto entre nodos. Puedo navegar entre niveles

      • // : Puedo ir por varios niveles en el esquema que construimos.

      Ejemplo:

      # Fuente de trabajo Quotes to Scrape: url ="http://quotes.toscrape.com/" #Quiero extraer el texto de mi nodo h1. $x('//h1/a/text()').map(x => x.wholeText) # Devuelve en consola: ["Quotes to Scrape"] #La función map pertenece a Js y la estoy usando para que me muestre todo el texto de la selección de Xpath.

      Existen otras expresiones

      • /.. : Acceder a todos los nodos padre de x nodo.
      • /@atribute_name : Me permite extraer atributos
      #Estoy trayendo todos los atributos class de los nodos span. $x('//span/@class')

      Para ser específicos con los datos a extraer se usan predicados.

      Antonio Arana

      Antonio Arana

      student•
      hace 4 años

      COPIA Y PEGA EL XPATH:

      Fui a jugar un rato en Amazon con lo aprendido en esta clase y descubri que es posible obtener el Xpath completo, para tan solo copiar y pegar, chequen:

      2021-11-25.png
        Jeinfferson Bernal G

        Jeinfferson Bernal G

        student•
        hace 3 años

        Muy bueno!

        Diego Jurado

        Diego Jurado

        student•
        hace 3 años

        Que interesante dato!!

      William Leonardo Torres Toloza

      William Leonardo Torres Toloza

      student•
      hace 5 años

      ¿Les parece que el vídeo está mal rippeado? Yo lo veo como poco fluido la verdad

        Andrés David Lizarazo Becerra

        Andrés David Lizarazo Becerra

        student•
        hace 5 años

        A veces sí me da esa sensación, sin embargo le subo a la velocidad de reproducción y arreglado👌

        Antonio Garzón

        Antonio Garzón

        student•
        hace 5 años

        Sube la velocidad. ya que si pareciera que tiene este problema.

      Miguel Angel Paz Gonzalez

      Miguel Angel Paz Gonzalez

      student•
      hace 5 años

      Me costo trabajo pero lo logre. Extraje de wikipedia los links del menu de contenido:

      for(i=1; i<=5; i++) { console.log(i + '.- ' + $x('//*[@id="p-navigation"]/div/ul/li/a')[i].href) }

      y los imprimi en consola.

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Bien (:

      Abraham Manuel Munguia Coronado

      Abraham Manuel Munguia Coronado

      student•
      hace 5 años

      haciendo click derecho en copiar en la seccion elements del inspector podemos copiar el elemento en formato xpath para ese elemento

      Alan Vazquez

      Alan Vazquez

      student•
      hace 6 años

      // = {Espacion en blanco} ( Brinca directamente a la etiqueta ) / = > ( Selecciona el nodo siquiente )

      CSS no tiene una forma nativa pata acceder a los elementos padre o al valor de un atributo (Pero si puede buscar segun un atributo e inclusive un atributo con un valor especifico) sin embargo cada lenguaje implementa metodos para poder acceder a estos.

      # Navegar entre la jerarquia $$('html > body > div > div') # Ir directamente al nodo ( Retorna todos los nodos concidentes ) $$('h1') # Brinca hasta la primera concidencia sin necesidad de seguir la jerarquia de nodos directamente $$('html > body span') # Acceder a los padres en JS ( map() solo es para aplicar el metodo a cada elemento de la lista ) $$('span').map(x => x.parentElement) # Buscar los elementos que tengan el atributo class $$('span[class]') # Obtener el valor del atributo $$('span[class]').map( x => x.getAttribute('class') ) $$('span[class]').map( x => x.attributes['class'].value )

      *( CSS brinca hasta el nodo donde encuentre la concidencia ) **( Las funciones para obtener los valores de los atributos varian segun el lenguaje de programacion )

      Alan Vazquez

      Alan Vazquez

      student•
      hace 6 años

      Para usar los selectores de CSS se usa $('') o $$('') La pricipal diferencia es que usando un solo $ solo devuelve la primer concidencia y con $$ devuelve todas las concidencias https://developers.google.com/web/tools/chrome-devtools/console/utilities#queryselectorall https://developers.google.com/web/tools/chrome-devtools/console/utilities#queryselector

      Royer Guerrero Pinilla

      Royer Guerrero Pinilla

      student•
      hace 5 años

      Me parece mejor usar

      $x('//h1/a/text()').map(x => x.data)

      en lugar de

      $x('//h1/a/text()').map(x => x.wholeText)
      Edgar Roquel

      Edgar Roquel

      student•
      hace 3 años

      Es posible usar Xpath desde la consola usando JavaScript, para esto debemos valernos de las siguientes expresiones: .

      • $x('') = entre las comillas es que debo escribir mis expresiones de Xpath. .
      • /: el slash hace referencia al root/raíz del documento HTML. $x('/') esto devuelve el objeto document. El slash también se usa para salta de un nodo a otro, respetando una jerarquía, $x('/html/body/div/h1'). .
      • //: El doble Slash sirve para saltar directamente a un nodo, $x('//h1'), esto de devuelve el o los h1 disponibles en el documento HTML. .
      • text() = este método me devuelve el texto del o los nodos que estoy seleccionando $x('//h1/a/text()'), esto me devolvería un objeto text, el cual tiene tas las propiedades de un nodo tipo texto y entre estas propiedades está el nodoValue el cual contiene el texto del h1. .
      • Usando el método map() = $x('//h1/a/text()').map(x => x.wholeText), esto me devuelve el texto del o los nodos seleccionados. Ojo, este método es de JavaScript y por tanto funciona en la consola, pero no lo hará al trabajar en Python. .
      • /.. = Me permite ir directo a un nodo, pero me devuelva el padre directo de cada uno. $x('//span/..') es similar a navegar desde la consola de comandos. .
      • @ = Se usa para acceder a los atributos de uno o varios nodos, por ejemplo: $x('//span/@class'), esto me devuelve tas las clases de todos los span, pero al igual que text() me devuelve un objeto y dentro de este puedo ver el nombre de la clase en el atributo value.
      Luis Arces Palomino Blas

      Luis Arces Palomino Blas

      student•
      hace 4 años

      Saber manejar la consola me ayudo mucho a entender esta clase!

      Alan Vazquez

      Alan Vazquez

      student•
      hace 6 años

      Para los que les interesa saber que hace la funcion map() esta en palabras simples solo aplica una funcion a cada elemento de ua lista ( Esta lista son los resultados de la busqueda )

      $x('//h1/a/text()') [text] 0: text assignedSlot: null .... previousSibling: null textContent: "Quotes to Scrape" wholeText: "Quotes to Scrape" length: 1 __proto__: Array(0) $x('//h1/a/text()').map(x => x.wholeText) ["Quotes to Scrape"]

      La funcion solo accede a la propiedad wholeText del resultado, esto para cada elemento de la lista


      Usando CSS seria algo asi Resultado de la busqueda:

      $$('h1 a') [a] 0: a accessKey: "" .... text: "Quotes to Scrape" textContent: "Quotes to Scrape" length: 1 __proto__: Array(0)

      Para acceder al texto es hacer lo mismo

      $$('h1 a').map(x => x.text) ["Quotes to Scrape"]
      Luis Fernando Úbeda Camacho

      Luis Fernando Úbeda Camacho

      student•
      hace 6 años

      $x(''): Para utilizar las expresiones de XPath.

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        / = raíz del documento, salto entre nodos. // = Saltro grande entre nodos que llega al último text() = Textro entre los nodos /.. = Todos los divs padres @ = Acceder a los atritutos

      Carolina Acosta Muñoz

      Carolina Acosta Muñoz

      student•
      hace 5 años

      Algunos ejemplos de expresiones en XPath:

      • Siempre deben ir dentro de comillas y paréntesis así: $x(' expresión ')
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Gracias, no se ve la imagen.

      Sara María Mejia Sánchez

      Sara María Mejia Sánchez

      student•
      hace 3 años

      En definitiva este curso tiene mucho potencial, el XPath permite interactuar de manera muy dinámica con los nodos del HTML.

      Les comparto las diferentes expresiones usadas:

      $x('/') $x('/html') $x('/header') $x('//h1') $x('//h1/a/text()') $x('//h1/a/text()').map(x => x.wholeText) $x('//span/.') $x('//span/..') $x('//span/@class')
      Joaquín Alejandro Domínguez Lozano

      Joaquín Alejandro Domínguez Lozano

      student•
      hace 4 años

      todo lo que necesitan para aprender xpath, usenlo mientras practican

      Antonio Demarco Bonino

      Antonio Demarco Bonino

      student•
      hace 4 años

      Clase maravillosa y que te hace sacarle el miedo a la consola, como tantas otras, además de poder ir a las entrañas de cada web. Ya sacaremos adelante estas prácticas.

      Cristian Roso

      Cristian Roso

      student•
      hace 5 años
      # Ir a la raíz. O agregar despues para seleccionar un nodo $x('/') # Salto entre nodos $x('//') # Ir directo al nodo $x('//h1') # Extraer directo del nodo en Python $x('//h1/text()') # Extraer directo del nodo en JS $x('//h1/a/text()').map(x => x.wholeText) # Accede al nodo padre $x('//span/..') # Acceder a todos los padres del nodo $x('//span').map(x => x.parentElement) # Extrae los span con atributo class $x('//span/@class')

    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