CursosEmpresasBlogLiveConfPrecios

Operadores en Xpath

Clase 11 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
    Alejandro Giraldo Londoño

    Alejandro Giraldo Londoño

    student•
    hace 5 años

    RESUMEN:Operadores en Xpath

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

    Hay una forma de filtrar más avanzada y es con operadores lógicos.

    Operadores lógicos en Xpath : Cabe notar que los operadores se están usando dentro del predicado.

    • !=
    • <>
    • and
    • or
    • not

    Ejemplo:

    #Usando el operador != diferente, le estoy diciendo que me traiga todos los nodos span que tienen clase diferente a Texto. $x('//span[@class!="text"]') # Usando operador not me devuelve todos los nodos que no tienen el atributo class. $x('//span[not(@class)]'
      Moisés Manuel Morín Hevia

      Moisés Manuel Morín Hevia

      student•
      hace 5 años

      Buen resumen.

      César Daniel Carrasco Gutiérrez

      César Daniel Carrasco Gutiérrez

      student•
      hace 4 años

      Excelente resumen, muchas gracias.

    Alan Vazquez

    Alan Vazquez

    student•
    hace 5 años
    XPATHCSS Selector
    !=:not(attr = value)
    position()
    attr1 AND attr2[attr1][attr2]
    selector[attr1 OR attr2]selector1, selector2
    NOT():not(attr or selector)
    # span con clase diferente de text $$('span[class]:not(.text)') # span de clase text y atributo itemprop $$('span.text[itemprop]') # span con clase text o tag-item $$('span.text, span.tag-item') # span que no tienen atributo de clase $$('span:not([class])')

    *Css no tiene un forma nativa de usar el position de xpath, pero se pueden herramientas del lenguaje de programacion, como los slices de python

      Moisés Manuel Morín Hevia

      Moisés Manuel Morín Hevia

      student•
      hace 5 años

      Teoría & practica !

    Luis Rogelio Reyes Hernandez

    Luis Rogelio Reyes Hernandez

    student•
    hace 5 años
    $x('//span[@class!="text"]') // todos los span que tenga una clase distinta de "text" $x('/html/body/div/div[position()=1]') // trae los elementos en la posicion 1 $x('/html/body/div/div[position()>1]') // trae todos los elementos que se encuentran despues de la posicion 1 $x('//span[@class="text" and @class="tag-item"]') // trae los elementos que tengan como clase a "text" Y a "tag-item" $x('//span[@class="text" or @class="tag-item"]') // trae los elementos que tengan como clase a "text" O a "tag-item" $x('//span[not(@class)]') // trae todos los span que NO tengan una clase
    David Esteban Solorzano Taborda

    David Esteban Solorzano Taborda

    student•
    hace 5 años

    Hay un div en el html el cual tiene ambas clases (row y header-box), pero no me funciona de esta forma, no deberia servir?

    $x('//div[@class="row" and @class="header-box"]')

    Me funciona si lo hago de esta forma solo si estan en este orden inclusive

    $x('//div[@class="row header-box"]')```
      Kenny Emmanuel Lajara Aquino

      Kenny Emmanuel Lajara Aquino

      student•
      hace 5 años

      Esto sucede porque la @class="row" significa "que la clase se exactamente igual a row" y @class="header-box" significa "que la clase sea exactamente igual a header-row". . Como row header-box no exa exactamente igual a row ni exactamente igual a header-box (ni mucho menos igual a los dos al mismo tiempo), no lo puede extraer. . Para extraerlo correctamente hay que usar una función que todavía no han explicado llamada contains(). La solución a lo que buscas quedaría así:

      $x('//div[contains(@class, "row") and contains(@class, "header-box")]')
      David Esteban Solorzano Taborda

      David Esteban Solorzano Taborda

      student•
      hace 5 años

      Gracias por la respuesta, si inclusive en otro curso mas adelante lo entendi, pense que se hacia sin importar si era exactamente igual

    Oscar Castillo

    Oscar Castillo

    student•
    hace 5 años

    ¿Alguien sabe por qué en este caso las posiciones arrancan en 1 y no en 0?, siendo que está escribiendo en JS.

      Juan Castro

      Juan Castro

      teacher•
      hace 5 años

      Según https://www.w3schools.com/xml/xpath_syntax.asp:

      [1] selects the first element. Note: In IE 5,6,7,8,9 first node is[0], but according to W3C, it is [1].

      Geovany Uribe Aguirre

      Geovany Uribe Aguirre

      student•
      hace 5 años

      No está escribiendo en Java Script, está escribiendo en XML

    Carlos Vallejo

    Carlos Vallejo

    student•
    hace 5 años

    Quería practicar un poco. Mi objetivo fue obtener el primer tag de cada quote. Les comparto mi código:

    $x('/html/body/div/div[@class="row"]/div[1]/div[@class="quote"]/div[@class="tags"]/a[@class="tag"][1]/text()').map(item => item.wholeText)
      Kenny Emmanuel Lajara Aquino

      Kenny Emmanuel Lajara Aquino

      student•
      hace 5 años

      Muy buen ejercicio. Yo encontré una expresión más corta para hacer lo mismo. La dejo por aquí:

      $x('//a[@class="tag"]/../a[1]/text()').map(x => x.wholeText)

      La explicación ens la siguiente: Ve a todas las etiquetas a que tengan clase tag y busca a su padre. Luego, selecciona solo la primera etiqueta a y extrae su texto.

      Omar Guadarrama

      Omar Guadarrama

      student•
      hace 5 años

      Tienes razón aunque la otra expresión también te trae el Top 10 de etiquetas usadas.

    Juan David Suarez

    Juan David Suarez

    student•
    hace 5 años
    $x('//div[@class="quote"][1]/span[@class="text"]/text()').map(x => x.wholeText) # Traer la primera Quote de toda la página //div[@class="tags"]/a[position()<=3]/text() # Top 3 de Tags por Quotes
    Carolina Acosta Muñoz

    Carolina Acosta Muñoz

    student•
    hace 5 años

    Lista de operadores y su descripción

      Moisés Manuel Morín Hevia

      Moisés Manuel Morín Hevia

      student•
      hace 5 años

      Gracias pero no veo la imagen.

      Carolina Acosta Muñoz

      Carolina Acosta Muñoz

      student•
      hace 5 años

      😱😱😱

    Carlos Javier Guevara Contreras

    Carlos Javier Guevara Contreras

    student•
    hace 5 años

    Interesante

      Moisés Manuel Morín Hevia

      Moisés Manuel Morín Hevia

      student•
      hace 5 años

      Super interesante.

    Nicoll Idaly Angulo Mejia

    Nicoll Idaly Angulo Mejia

    student•
    hace 5 años

    Existe una forma de decirle que contenga tal valor?

    por ejemplo si tengo la etiqueta

    <h2>Quotes</h2>

    decirle si la etiqueta comienza en Quo o termina en tes?

      Johannes Alberto Talero Mesa

      Johannes Alberto Talero Mesa

      student•
      hace 5 años

      Seguro ya lo solucionaste, pero en todo caso lo comento. Esto lo explican en la clase de In-text search. Donde se presentan expresiones como:

      contains() start-with() end-with(.,"") matches(.,"")

      Las ultimas dos no correrán en chrome pero si en Python.

      Angel Ivan Carrillo  de Leon

      Angel Ivan Carrillo de Leon

      student•
      hace 5 años

      Yo lo hice de la siguiente forma

      $x('//*[contains(text(), "This")]')

      El contains es case sensitive, si no estas seguro de cual es mayuscula o minuscula puedes usar

      $x('//*[contains(translate(text(),"ABCDEFGHIJKLMNOPURSTUWXYZ","abcdefghijklmnopurstuwxyz"), "this")]')
    Humberto Diaz Grieve

    Humberto Diaz Grieve

    student•
    hace 5 años

    Para llamar cierta cantidad de elementos, se usa position() $x('//div[@class="quote" or position()=2]') En este ejemplo, llamamos a los divs que tengan la class quote o que estén en la posición dos (la cual es relativa a su nodo padre.)

    César Espinoza García

    César Espinoza García

    student•
    hace 5 años

    Siempre me he preguntado por qué una plataforma como Platzi no puede hasta la fecha darse cuenta que la barra siempre presente de 'play', 'pause', etc. disminuye la calidad de experiencia en los usuarios. Es un problema que lo he visto y vivido desde que entré a la plataforma y que muchas otras personas también lo han padecido; sin embargo, a la fecha el inconveniente persiste.

    Carlos Jiménez

    Carlos Jiménez

    student•
    hace 4 años

    A page or script is accessing at least one of navigator.userAgent, navigator.appVersion, and navigator.platform. Starting in Chrome 101, the amount of information available in the User Agent string will be reduced. To fix this issue, replace the usage of navigator.userAgent, navigator.appVersion, and navigator.platform with feature detection, progressive enhancement, or migrate to navigator.userAgentData.

    Sara María Mejia Sánchez

    Sara María Mejia Sánchez

    student•
    hace 3 años

    Excelente clase, definiticamente XPath es un gran aliado para el Web Scraping.

    Les comparto los Operadores vistos en clase:

    $x('//span[@class!="text"]/text()') $x('//span[@class!="text"]/text()').map(x => x.wholeText) Todos los span que tienen una clase distinta a texto. $x('/html/body/div/div[position()>1]') Trae los elementos de una posicion hacia arriba. $x('//span[@class="text" or @class="tag-item"]') Trae todos los span que tengan como clase a text o que tengan como clase tag-item. $x('//span[@class="text" and @class="tag-item"]') Trae todos los span que tengan como clase a text y que tengan como clase tag-item. $x('//span[not(@class)]') Trae todos los span que no tengan un atributo de tipo class.
    Jeinfferson Bernal G

    Jeinfferson Bernal G

    student•
    hace 3 años

    Operadores en XPath

    • ! = : indica que debe ser distinto
    $x('//span[@class!="text"]') --> (11) [span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.sh-red] # 11 nodos span que tiene clase de tipo tag-item y no de tipo texto
    • < : permite obtener las etiquetas segun sea mayor o menor a un determinado valor

    $x('/html/body/div/div[position()>1]') --> [div.row] #obtiene las etiquetas que estan despues de la primera.
    • and : indica que trae las etiquetas que cumplen dos condiciones a la vez
    $x('//span[@class="text" and @class="tag-item"]') #obtiene los nodos con clases de tipo text y tag-item
    • or : trae los nodos que cumplan con alguna de dos condiciones
    $x('//span[@class="text" or @class="tag-item"]') --> (20) [span.text, span.text, span.text, span.text, span.text, span.text, span.text, span.text, span.text, span.text, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item, span.tag-item] #obtiene los nodos que tengan clases de tipo text o de tipo tag-item
    • not : trae los nodos que no cumplen una condicion
    $x('//span[not(@class)]') --> (11) [span, span, span, span, span, span, span, span, span, span, span] #trae los nodos que no tienen atributos de tipo clase
    Antonio Demarco Bonino

    Antonio Demarco Bonino

    student•
    hace 4 años

    Otra clase rompe cabezas que te hace salir de tu zona de confort y saber más del tema. Una maquina de incorporar nuevo conocimiento.

    Jesús Zelaya Contreras

    Jesús Zelaya Contreras

    student•
    hace 4 años

    Código para traer los 3 elementos del top ten de tags:

    $x('//span[@class="tag-item"][position()<4]/a/text()').map(x => x.wholeText)
    Juan Carlos Ortiz Romero

    Juan Carlos Ortiz Romero

    student•
    hace 4 años
    $x('/html/body/div/div[@class="row"]/div[1]/div[@class="quote"]/div[@class="tags"]/a[@class="tag"][1]/text()').map(item => item.wholeText)
    Juan Carlos Ortiz Romero

    Juan Carlos Ortiz Romero

    student•
    hace 4 años

    🤖🤖🤖 Operadores lógicos en Xpath : Cabe notar que los operadores se están usando dentro del predicado. != <> and or not

    César Isaac González Naranjo

    César Isaac González Naranjo

    student•
    hace 4 años

    Para traer a todos los autores de las citas

    $x('//span/small[@class = "author"]/text()').map(x =>x.wholeText)

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