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

    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 5 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 5 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 5 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 5 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 5 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