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 28

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

RESMEN:In text Search

鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻犫枲

Para buscar cadenas de caracteres especificas dentro de un texto.

  • start-with(.鈥淭exto 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 (., 鈥淭exto 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

La busqueda no es case sensitive?

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

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 鈥渁uthor鈥 y empiecen con 鈥淎鈥 (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 鈥淩o鈥
$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 鈥淎.*n鈥 que empiece con A y termine con n

$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 鈥渁nd鈥 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"]

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 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 鈥渓ove鈥 o 鈥渋nspirational鈥

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

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 鈥淩o鈥 a 鈥渞o鈥.
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(.鈥淭exto a buscar鈥): Empezar con, el punto hace referencia al nodo actual.
$x(鈥//small[@class=鈥渁uthor鈥 and starts-with(.,鈥淎鈥)]/text()鈥).map(x => x.wholeText)
#Devuelve (4) [鈥淎lbert Einstein鈥, 鈥淎lbert Einstein鈥, 鈥淎lbert Einstein鈥, 鈥淎ndr茅 Gide鈥漖

contains (., 鈥淭exto a buscar鈥) : Sirve para llamar por el texto contenido en.
$x(鈥//small[@class=鈥渁uthor鈥 and contains(., 鈥済鈥)]/text()鈥).map(x => x.wholeText)
#Devuelve [鈥淛.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(.鈥淭exto a buscar鈥): Empezar con, el punto hace referencia al nodo actual.
contains (., 鈥淭exto 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(., 鈥渂yte鈥) ')
contains(,. 鈥渂yte鈥)
ends-with(,. 鈥渂yte鈥)
matches(,. "bye.*byte)