No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

In-text search en Xpath

13/21
Recursos

Aportes 30

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

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.

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

$x('//small[@class="author" and @itemprop="author" and starts-with(., "A")]/node()').map(x => x.wholeText)
// 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

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

La busqueda no es case sensitive?

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

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)```

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

$x('//*[@class="author" and @itemprop="author" and starts-with(., "A") ]/node()').map(x => x.wholeText)```

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

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

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

Starts-with y ends-with para buscar coincidencias

que bien

Muy Util

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"]

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


$x('//div/a[@class="tag" and (contains(., "love") or contains(., "inspirational")) ]/text()')

Encontrar los tags que contengan “love” o “inspirational”

"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)```

start-with y end-with son de python?

Nota://text(): selecciona únicamente el texto contenido en el nodo y todos sus descendientes.
$x(’//small[@class=“author” and starts-with(.,“A”)]//text()’).map(x => x.wholeText)

Contains para traer todos los atributos que conicidan con una expresion

In-Text search en XPath

  • $x('//small[@class="author" and starts-with(.,"A")]/text()').map(x =>x.wholeText): Trae todos los autores que empiezan con la letra A
(4) ['Albert Einstein', 'Albert Einstein', 'Albert Einstein', 'André Gide']
  • $x('//small[@class="author" and contains(.,"Ro")]/text()').map(x =>x.wholeText) : Trae todos los autores que contengan la expresion Ro
(2) ['J.K. Rowling', 'Eleanor Roosevelt']

Los siguientes metodos no funcionan en el motor JS del navegador ya que funciona con la version 1.0 de XPath

  • $x('//small[@class="author" and ends-with(., "t")]/text()').map(x =>x.wholeText) : Trae todos los autores que terminen con t
  • $x('//small[@class="author" and matches(., "A.*n")]/text()').map(x =>x.wholeText) : trae todos los autores que coincida con cierta expresion regular. en este caso, que empiecen con la letra A y terminen con la letra n

Hacer filtros en el texto con funciones de python.

  1. Para buscar por la inicial de un autor: starts-with(nodo, letras): $x('//small[@class = "author" and starts-with(., "A")]') -> (Se usa . para indicar el nodo actual)
  2. Para buscar por un grupo de caracteres en la palabra usar: contains(nodo, letras): $x('//small[@class = "author" and contains(., "Ro")]')
  3. Para buscar por la final de un autor: ends-with(nodo, letras) : $x('//small[@class = "author" and ends-with(., "as")]')
  4. Para usar expresiones regulares usar: matches(nodo, expresion-regular): $x('//small[@class = "author" and matches(., "A.*n")]')

Tengan cuidado, las búsquedas no son iguales si buscan “Ro” a “ro”.
Si quieren ambos resultados necesitan escribirlo así:

$x('//small[@class="author" and (contains(.,"Ro") or contains(.,"ro"))]/text()').map(x => x.wholeText)
------
(3) ['J.K. Rowling', 'Marilyn Monroe', 'Eleanor Roosevelt']

Me dolió cuando me dio el error pero me calmo el ver que el docente también lo tiene. Sin dudas que estas funciones te hacen hacer búsquedas más justas y perfectas.

  • Esto sirve para la busqueda de caracteres específicos dentro de. una cadena de texto

  • starts-with

    Dara las cadenas que inicien con lo que esta dentro del (., )

    $x('//small[@class="author" and starts-with(.,"A")]/text()').map(x => x.wholeText)
    #Devuelve (4) ["Albert Einstein", "Albert Einstein", "Albert Einstein", "André Gide"]
    
  • Contains

    Truer todos las. cadenas que contengan el carácter cadena de texto asignado

    $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

    Dara las cadenas que terminen con lo que esta dentro del (., )

  • matches

    Sirve para hacer una búsqueda en el texto de un nodo que coincida con una expresión regular.

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.

Vean el curso de expresiones regulares

start-with(.“Texto a buscar”): Empezar con, el punto hace referencia al nodo actual.
contains (., “Texto a buscar”) : Sirve para llamar por el texto contenido en.
end-with(.,""): Termina en.
matches(.,""): Sirve para hacer una búsqueda en el texto de un nodo que coincida con una expresión regular.

In-text searc
$x(’ Expresión[Predicados] and starts-with(., “byte”) ')
contains(,. “byte”)
ends-with(,. “byte”)
matches(,. "bye.*byte)