100% encontró este documento útil (1 voto)
203 vistas18 páginas

Fundamentos de Web Scrapping Con Python y Xpath

Este documento es parte de mis apuntes de un curso de platzi. Buscalo es buenisimo. Espero te sean utiles mis apuntes

Cargado por

Pablo Perez Moya
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
203 vistas18 páginas

Fundamentos de Web Scrapping Con Python y Xpath

Este documento es parte de mis apuntes de un curso de platzi. Buscalo es buenisimo. Espero te sean utiles mis apuntes

Cargado por

Pablo Perez Moya
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

Fundamentos de Web Scrapping con Python

y Xpath
Introducción Web Scrapping
¿Qué es el WebScrapping?
¿Qué es Xpath?
¿Porque usar un webscrapping?
Python: el lenguaje más poderoso para extraer datos
Fundamentos de la Web
Entender HTTP
Hasta aqui todo bien, pero ¿Como se estructura HTTP?
Peticion
Respuesta
¿Donde se ubica HTTP en la web?
¿Qué es HTML?
Reto: Para que sirve etiqueta script.
Reto: Que son los metadatos y como incluirlos dentro de un documento html.
Reto: Buscar etiqueta que sirve para colocar un sitio web dentro de otro.
Robots.txt
XML Path Language
Expresiones Regurales
Tipos de Nodos
Esquema HTML
Expresiones en XPath
Predicados en XPath
Operadores en XPath
Operadores Logicos
Wildcards en XPath
Asterisco *

node()

In-Text Search en XPath


Starts-with
Contains
Ends-With
Matches
AXES en XPath
Hijos
Descendientes
Descendientes + nodo actual
Resumen de XPath
Aplicando lo aprendido
Tarea
Extraer Titulo
Extraer Precio
Extraer Descripción
Extraer Stock
Reto Extra
Por si las moscas
Cuando usar value?
Traer nodos hermanos
Proyecto: Scrapper De Noticias

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b3cb6dc-ee2c-45b7-b2b218a1ae6366a
b/slidesxpath_c6d75e8b-c8b14359-bbe3048380ea4e86.pdf

Introducción Web Scrapping


Fundamentos de Web Scrapping con Python y Xpath 1
¿Qué es el WebScrapping?
El webscrapping es una tecnica para recolectar y extraer información desde distintos sitios webs.

¿Qué es Xpath?
Xpath significa XML Path Lenguage este es un lenguaje especializado que sirve para extraer datos de manera
efectiva.

¿Porque usar un webscrapping?


En sintesis, si un sitio no dispone de una API publica sera imposible manejar ciertos datos de esta web, pero
nosotros al saber aplicar el web scraping podremos independizarnos de estas APIs.

Python: el lenguaje más poderoso para extraer datos


¿Porqué? Sencillamente porque posee una de las comunidades más grandes para la extracción de datos. Además
de poseer bastantes frameworks o librerias dedicadas a esto.

Fundamentos de la Web
Entender HTTP
Hypertext Transger Protocol.
Este es un protocolo o conjunto de reglas con las cuales dos computadoras se comunican en el internet.

Estas computadoras se identifican por CLIENTE y SERVIDOR.

Cada vez que hacemos ingreso a una web se genera


una peticion al SERVIDOR el cual deriva hacia el slot
en su interior (el cual es un computador que contiene
en su interior un software como nginx), en el cual se
almacena el sitio al que queremos acceder, este
interpreta la petición y nos genera una respuesta.

Hasta aqui todo bien, pero ¿Como se estructura HTTP?


Peticion
Vamos por cada linea:

 Tenemos el método, el cual en la mayoria de las


peticiones es GET, el cual significa traer desde el
servidor. Además a eso tenemos la version del
protocolo, en este caso HTTP 1.1

 Tenemos el Host, este podria ser el de cualquier


sitio, como platzi.com o youtube.com

 Tenemos el Accept-Lenguage: , este es el


lenguaje que aceptamos para la información que
nos devuelve el servidor. En este caso es fr
Frances, pero podria ser es o en.

Respuesta

Fundamentos de Web Scrapping con Python y Xpath 2


 Tenemos la version del protocolo HTTP 1.1. Tambien contamos con el codigo de estado o status code, en
este caso nos devuelve 200, esl cual significa que todo salio bien!

 Tenemos la fecha y hora en la cual se genero esta respuesta.

 Contamos con el servidor con el cual se realizo esta respuesta, en este caso es apache, pero tambien podria
ser nginx.

 Tenemos la ultima fecha de modificación en la que se modifico esta respuesta en particular.

 Tenemos una Etag, la cual tiene que ver con el caché(no se ve en el curso).

Permite a la memoria caché ser más eficiente, y ahorrar ancho de banda, en tanto que un servidor web
no necesita enviar una respuesta completa si el contenido no ha cambiado.

Por otro lado, si el contenido cambió, los etags son útiles para ayudar a prevenir actualizaciones
simultáneas de un recurso de sobre-escribirlo por otro (“colisiones en el aire”).

 Tenemos el Accept-Ranges el cual nos dice el tipo de dato que recibiremos, en este caso bytes.

 ¿Cuantos Bytes? En este caso lo delimita el Content-Length, el cual en este caso son 29 769 bytes o 29,7
KiloBytes.

 Y finalemente el Content-Type este es el tipo de respuesta que contiene el cuerpo de la respuesta del
servidor. Siendo text/html.

¿Donde se ubica HTTP en la web?


De abajo hacia arriba.

IP Internet Protocol, a partir del cual salen las


direcciones IPv4 e IPv6 que identifican a nuestro
computador de manera unica.

TCP Transmission Control Protocol, protocolo


que estable como se transfiere información a bajo
nivel.

UDP User Data Protocol, bastante parecido al


TCP. Permite el envío de datagramas a través de
la red sin que se haya establecido previamente
una conexión, ya que el propio datagrama
incorpora suficiente información de
direccionamiento en su cabecera.

TLS Transport Layer Security tiene que ver con


el encriptado de esta información.

DNS Domain Name System es lo que resuelve un


nombre de dominio a una IP, transformando de
platzi.com a 104.20.19.218 .

Fundamentos de Web Scrapping con Python y Xpath 3


Sobre todo esto se ubica HTTP, permitiendonos
transportar HTML, CSS, JavaScript, Web API´s.

Investigar Status Code y como enfrentarnos a estos

Investigar acerca de Cabeceras HTTP

¿Qué es HTML?
HyperText Markup Language, lenguaje que nos permite definir la estructura de una pagina web. Teniendo titulos,
parrafos, imagenes y encabezados (estructura de ejemplo)

Dentro de la web tenenmos varias partes, la estructura, estilos visuales y partes interactivas.
HTML —🡒 Estructura

CSS ——🡒 Estilos Visuales


JAVASCRIPT ⟶ Partes interactivas

Fundamentos de Web Scrapping con Python y Xpath 4


Reto: Para que sirve etiqueta script.
El elemento HTML Script ( <script> ) se utiliza para insertar o hacer referencia a un script ejecutable dentro de
un documento HTML o XHTML

Reto: Que son los metadatos y como incluirlos dentro de un documento html.
Los metadatos, literalmente «sobre datos», son datos que describen otros datos. En general, un grupo de
metadatos se refiere a un grupo de datos que describen el contenido informativo de un objeto al que se
denomina recurso.

Los metadatos se añaden dentro de la etiqueta <meta name="description" content="Esta es la descripción general de

la página"> y esta se añade en la etiqueta <head> .

Dentro de la etiqueta <head> debido a que ahi se almacenan las cabeceras del documento.

Reto: Buscar etiqueta que sirve para colocar un sitio web dentro de otro.
La etiqueta <iframe> permite insertar un documento html dentro de otro. La etiqueta <iframe> puede aparecer
como elemento de bloque o como elemento en-línea.

Robots.txt
Este archivo lo encontramos en la raiz del sitio web.

Este archivo cumple la función de informar al programador web-scrapper que no extraiga información de
estas rutas.
Definir este archivo es importante para que los web-scrappers no toquen/extraigan información sensible.

Respetar este archivo es importante, dado a que se puede incurrir en problemas legales.

User-Agent: Es la manera en
que se identifica una
computadora cunado hace una
petición a un sitio web. Con
esta linea User-Agent: * los
sitios como google, twitter o
platzi aceptan a cualquier
User-Agent, siendo un mac,
iphone, android, opera, chrome,
script de python u otros.

Fundamentos de Web Scrapping con Python y Xpath 5


Allow: /Con esta clausula se
permite la extracción o manejo
de datos a cualquier parte de
la raiz del sitio.

Disallow: /** Con esta clausula


no nos permite entrar a ciertas
rutas en especifico. Estas
tampoco son indexadas por las
arañas de google u otro motor
de busqueda.

✅ Respetar el robots.txt es question de buenas practicas

XML Path Language

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bb66714990d642338314182087092ca
0/xpath-cheatsheet.md.pdf

XML Path Language


XML es muy parecido a HTML
Este se forma de nodos, envez de etiquetas como en HTML.

Una tecnica para extraer información de este lenguaje es usar XPath.


Al ser HTML y XML tan parecidos, podemos usar esta misma tecnica para hacer extracción de información de
paginas web.

Expresiones Regurales
Es un lenguaje que nos permite definir patrones para
encontrar coincidencias en un texto.
Supongamos que queremos buscar en un texto las
palabras que empiezan por la letra a y terminan con
la letra o. Esta linea de codigo dice que queremos
En este caso seria muy producente usar expresiones extraer el primer titulo de un span que
regulares para obtener este resultado.
esta dentro de un div.

✅ XPath es a HTML lo que las expresiones regulares son a un texto.

Tipos de Nodos
Cuando hablamos de nodo nos referimos a una etiqueta HTML con todo lo que posea en su interior.

Scraping Sandbox
A website that lists quotes from famous people. It has many endpoints showing the quotes in many
different ways, each of them including new scraping challenges for you, as described below.

http://toscrape.com

Fundamentos de Web Scrapping con Python y Xpath 6


Este sitio web es un sandbox con el cual podremos realizar practicas de web scraping sin problemas ni
preocupaciones.

Esquema HTML

Expresiones en XPath
CTRL + SHIFT + I —→ Acceder a las developer tools

Fundamentos de Web Scrapping con Python y Xpath 7


Dentro de estas comillas es donde incluiremos las
expresiones Xpath.
La primera expresión que conoceremos sera la de slash / , y
como ves en respuesta la consola nos devuelve [document] .

Slash dentro de una expresión de Xpath significa que


seleccionamos a todo el documento, es como extraer la raiz
o root del documento.

Slash también significa un salto entre nodos, cada vez que


vamos de un nivel a otro vamos a nombrarlo con slash /
dentro de nuestra expresión.

Si recuerdas la estructura básica de HTML esta se compone


de la etiqueta madre <html> y etiquetas hijo <head> y <body>

Entonces si escribimos /html dentro la expresion XPath


vemos que selecciona ese nodo.
Prácticamente seleccionamos todo el documento
nuevamente.

Si te das cuenta, para llegar a un elemento en especifico de


nuestro documento debemos escribir su ruta completa, algo
que en algunos casos puede volverse tedioso y
contraproducente.

Para eso existe solución! Se llama Doble Slash // .


Esta expresión nos permite hacer saltos entre los niveles del
HTML.
En este caso queremos extraer todos los nodos que tienen
de nombre h1 .

Esto devuelve en este caso el unico nodo h1 en esta web.

Otra expresión útil es la llamada text()

Si escribimos después del nodo que acabamos de extraer


/a/text() esto nos trae justamente el texto que contiene este

nodo. Nodo /a debido a que el texto esta dentro de esta


etiqueta en el HTML.
Pero, ¿como lo podemos visualizar? Para esto necesitaremos
solo lo que se ubica al interior de las comillas //h1/a/text() y
Python .💚
Fundamentos de Web Scrapping con Python y Xpath 8
Existe una forma para visualizar este texto en el navegador,
usando JavaScript.
Simplemente se usa el método map con la dot notation al
igual que en Python asigna a cada índice de un objeto
iterable una misma función.
En este caso seria $x('//h1/a/text()').map(x ⇒ x.wholeText)

Y nos devuelve el texto del titulo de la pagina que seria


"Quotes to Scrape".

Cabe recalcar que se puede usar con todos los nodos del
documento, como en este caso todas las etiquetas de
hipertexto del documento HTML.
Usando la siguiente declaración $x('//a/text()').map(x ⇒

x.wholeText)

En esta linea declaramos (antes del punto) que queremos


extraer todos los nodos de hipervínculo, etiqueta HTML <a>
y luego usamos el método map para que se nos muestre en
pantalla.

Como vez en la primera imagen, si usamos solo el . punto


nos muestra las etiquetas hijas. Pasaría lo mismo si solo
escribiéramos $x('//span')

El punto significa que seleccionamos el nodo actual.

¿Que hacemos si queremos acceder a la etiqueta padre, la


etiqueta de más arriba?
Fácil, al igual que en la consola de comando tipeamos ..

Si usamos el .. doble punto veremos las etiquetas padre.


O sea, las que están en un nivel superior, pero nos las
saltamos con anterioridad usando el // doble slash.

Necesariamente si necesitamos extraer atributos de un nodo,


¿que hacemos?

Se usa el @ arroba en la expresión de Xpath.


En ese caso traeremos los atributos de tipo class de span.
Y vemos que el navegador nos trae todos los atributos class
en ese nodo.

Además con esto podemos extraer todas las clases de los


divs.

Predicados en XPath
Debido a que debemos filtrar de una forma mucho más especifica en nuestros nodos y encontrar esa
información que queremos extraer usaremos los predicados.

Fundamentos de Web Scrapping con Python y Xpath 9


Si miras la declaración, vez que la respuesta de la
consola son dos div, fácilmente podemos seleccionar
a ambas dejándolo tal como esta, pero que pasa si
solo queremos solo el primer div div.row.header-box ?
En este caso se usan los predicados. Cuando
queremos una respuesta especifica.
En el interior de los brackets colocamos el índice del
elemento (se cuenta desde izquierda a derecha,
desde el 1.

Como vez, extrajimos solo el div.row.header-box que


queríamos con la ayuda de los predicados.

Imaginemos que tenemos un documento con muchos


div , ¿como le hacemos cuando queramos solo el

ultimo de estos?
Usando el predicado (el cual en sí es un metodo)
[last()] , como dice su nombre, tomara el ultimo div .

Imaginemos que queremos traer todos los nodos de


tipo span pero como condición quiero que tengan por
lo menos un atributo de tipo class
Si recordamos para extraer todos los span usamos el
doble slash // y para llamar atributos usamos el
arroba @ . El atributo lo introducimos dentro de
nuestro predicado ( [] ).

📌 Cada vez que veas un @ antes de un


nombre quiere decir que ese nombre es un
atributo

Conociendo esto podemos ser más específicos en


nuestras declaraciones, en el siguiente ejemplo
haremos que nos traiga un atributo especifico.

Ahora queremos específicamente que nos traiga un


atributo de tipo class y que además esa clase tenga
por nombre o sea igual a "text" .

📌 Solo sirven las comillas dobles "" al interior


del predicado. Olvidate de las comillas
simples ahi dentro.

Para refrescas la memoria usaremos la expresion


text() y el método map() para visualizar el texto.

Como vez en la imagen esto nos devuelve las citas de


la pagina web, debido a que estas se escuentran
dentro de un span que tiene como atributo la clase
text

Es hora de presentarte una herramiento muy util del


navagador.
Puedeas activarlo desde la zona izquiera que se ve en
la imagen o con el shortcut CTRL + SHIFT + C

Esta herramienta nos permite saber el nodo en el cual


se encuetra nuestra información a extraer.

Fundamentos de Web Scrapping con Python y Xpath 10


📌 Es muy util y siempre que qeuramos extraer
algo de alguna web es una buena idea
usarlo.

Operadores en XPath
Como hemos visto desde el principio de nuestro primer lenguaje de programación, existen distintos tipos de
operadores aritméticos, los cuales tienen un uso bastante importante en todos lados.

📌 Los operadores + los predicados son una forma muy eficiente de extraer datos.

Por defecto en nuestras declaraciones ya usabamos


un operador, el cual corresponde a la igualdad.

También podemos usar el de desigualdad. El cual nos


trae una clase que sea distinta que "text" . Si te das
cuenta, recoge todos los elementos con una clase
distinta a "text"

Otra cosa interesante es que podemos usar el método position() , el cual requiere un operador para que nos sea
útil.
Aquí si es útil usar el operador de:

igualdad =

Aquí se usa para referirnos a que posición


queremos que sea exactamente igual, en este
caso que 1.

desigualdad !=

Lo usamos para indicar que queremos un


elemento en la posición distinta a la dada, en este
queremos todos los elementos distintos a 1.

mayor >

Lo usamos para indicar si queremos un elemento


en la posición mayor a la indicada, en este caso
queremos todos los mayores que uno.

menor <

Se usa para indicar que queremos los elementos


menores a la posición indicada, en este caso

Fundamentos de Web Scrapping con Python y Xpath 11


queremos todos los menores que 2.

mayor o igual >=

Al igual que su homologo mayor que, este se


encarga de seleccionar los elementos mayores e
iguales que el valor de posición ingresado. En este
caso queremos todos los elementos de posición
mayor o igual que 1.

menor o igual <=

Nos entrega todos los valores menores e iguales


que el valor ingresado. En este caso queremos
todos los elementos en posiciones menores o
iguales a 1.

Operadores Logicos
Si recuerdas tu primer lenguaje de programación, existen operadores de tipo logico, los cuales son and , or y
not .

Operador and : Este nos sirve para buscar entre


nodos que posean la etiqueta text y la etiqueta
tag-item . Esta declaración nos devuelve un

objeto vacío, dado a que no existe en el


documento un nodo de tipo span que posea una
clase text y tag-item a la vez.

Operador or : Este operador nos es útil para


extraer información de el nodo span con clase
text y/o del nodo mismo nodo con clase tag-

item , haciendo así, búsquedas por cada uno de los

atributos declarados en el predicado, al revés del


el operador and el cual nos hace búsquedas de
ambas clases (concatenadas) por nodo. Como ves
en la imagen, nos trae varios nodos span.text y
span.tag-item .

Operador not : Este operador funciona


declarando la palabra not delante de un atributo
(@) y colocar este dentro de unas comillas eg.
not(@class).

Así negaremos la declaración y la respuesta de


esta será todos nodos que (según la imagen) nos
posean la clase text .

🔥 Usando los operadores podemos ampliar nuestra capacidad de extracción de información.

Wildcards en XPath
Que pasa si no sabemos que nodo queremos traer pero aproxiamdamente sabemos el lugar en donde se
encuentra.
Para estos casos en XPath tenemos los wildcards o comodines.

Asterisco *

Nos trae todo los nodos que están inmediatamente

Fundamentos de Web Scrapping con Python y Xpath 12


después del nodo html . Sucede lo mismo en la segunda
imagen, el asterisco nos traer solo los nodos que están
inmediatamente después de el nodo body .

Este wildcard podemos usarlo para traer nodos que


no sabemos exactamente como se llaman pero si
donde están.
Por ejemplo, si usamos la siguiente declaración
$x('//*') esta nos trae todos los nodos del

documento.
En especifico con esta expresión le decimos al
navegador que saltemos todos los niveles ( // ) en
todas las direcciones ( * ), por lo tanto el navegador
nos trae todos los todos y atributos de estos nodos.

Otro ejemplo interesante sería la siguiente declaración


$x('//span[@class="text"]/@*') , la cual nos trae todos

los atributos @ de todos los nodos * que están


inmediatamente después del nodo de tipo span que
tienen como clase text .

Un ejemplo bastante útil seria la siguiente declaración


$x('/html/body//div/@*') , la cual nos trae todo los

atributos dentro de todos los divs dentro del nodo


html/body.
Otra forma forma de explicarlo seria ⤵
A partir de html nos traemos el nodo body luego
saltamos niveles // y nos traemos todos los divs
(después de body ) y de estos divs nos traemos todos
los atributos.

node()

Es usado para traernos todo, sí, todo lo que esta en los nodos y más allá (como el contenido), a diferencia de *

que solo nos trae los nodos existentes inmediatos a el nodo actual.

Nos traeremos todos los span existentes que tengan


una clase text y que tengan un atributo de tipo
itemprop que cuyo valor sea también text y de aquí

nos traeremos todo lo inmediatamente después con


node() .

Si usamos * no nos retornara nada 😢👉


Esto debido a que * solo localiza nodos, no
elementos o texto, como lo hace node() .

Claramente, si vemos este nodo, podemos determinar que el texto de las citas no están dentro de un nodo <p>

esta dentro de el nodo span . Sabiendo esto, podemos determinar si usamos el * o node() .

In-Text Search en XPath


Problema: Queremos extraer todos los nombre de los autores que empiecen por la letra A y terminen con la letra
N.

Fundamentos de Web Scrapping con Python y Xpath 13


Starts-with
La declaración comienza buscando todos los nodos
smallen la cual se ubican todo los nombres de los
autores, luego usamos predicados para especificar
que clase queremos author y con que letra queremos
que comience starts-with .
Usando starts-with() , en esta incluimos lo siguiente
dentro de paréntesis (.,"A") . La función del punto .
es indicar en que nodo buscar, en este caso lo busca
en el nodo actual, la letra "A" nos indica que debe
iniciar con dicha letra.
Luego de eso especificamos que queremos extraer
solo el texto con text() y lo mostramos con el
método map(x=>x.wholeText) .
Esto nos extrae 4 resultados.

Contains
El método contains nos sirve para filtrar por los elementos que contenga nuestro nodo.

Buscamos todos los nodos small


//small con clase author @class="author"

y que contenga contains en ese nodo .


la cadena in "in" .
Luego extraemos el texto con text() y
lo mostramos en pantalla con el método
map .

Ends-With
Esta expresión no funciona en el XPath 1.0 de los buscadores (a día de hoy 10082020, pero si funciona en
Python, así que no te preocupes, el syntax que veremos será el mismo que en Python.

En esta expresión declaramos que queremos todos


los nodos small , los cuales contengan una clase de
nombre "author" @class="author" y terminen con n en
el mismo nodo.
Luego extraemos el texto text() y lo mostramos con
el método map

Matches
Matches nos sirve para hacer una busqueda en el texto de un nodo que coincida con cierta expresión regular

En esta expresion queremos que nos traiga los


autores que comienzen con la letra A A. y terminen
con la letra n *n .
En esta expresion obvie explicar que queremos
traernos todos los autores del nodo small que tengan
como clase author y que haga match con lo ya
mencinonado
Esto para luego extraer el texto y mostrarlo en
pantalla con map.

🔥 En ends-with como matches nos causa un error debido a que estas son expresiones de XPath 2.0, las
cuales no soporta el navegador, pero sí Python 🐍
AXES en XPath

Fundamentos de Web Scrapping con Python y Xpath 14


¿Que pasaria si necesitaramos el nodo padre de un nodo? Usariamos a la expresión .. para acceder a este.
¿Que pasa si no solo te pido el padre y te pido todos los ancestros? Para esto existen las Axes.
Como le indico de forma explicita al navegador que me traiga el mismo div?

Facil! Usando el . seria la forma


más rapida.

Tambien podemos usar los Axes


para hacerlo de manera completa
self::div , usando self :: y el

nombre del nodo donde estamos.

🔥 El punto . es azucar
syntaxica para usarlo
envez de axes.

Hijos
Y con los axes no solo me puedo traer al nodo en sí mismo, tambien me puede traer a los hijos.

En la 3era imagen vemos que nos trae los hijos del


nodo div, usando la forma child:: + el nodo actual.

Descendientes
Si queremos a los nietos/descendientes usamos
+ nombre del nodo. Descendant nos trae
descendant::

todos los nodos despues del actual incluyendo los


hijos.

Descendientes + nodo actual


Ahora quiero traerme los descendientes y también el
nodo actual. Esto lo logramos con descendant-or-
self::div .

Con esto nos traemos la unión entre los


descendientes de este nodo y el nodo en sí mismo.

Resumen de XPath

Fundamentos de Web Scrapping con Python y Xpath 15


Aplicando lo aprendido
Primero que todo usaremos la pagina
http://books.toscrape.com/
En esta tenemos una librería virtual en la cual nos será
muy útil para trabajar nuestras habilidades de web
scrapper.

Tarea
Extraer Titulo
Primero localice el nodo en el cual se ubica todo el
apartado del nombre div[@class="col-sm-6
product_main"] , de este nodo extraje el h1 y su texto
con text() para luego mostrarlo con el método
map(x⇒x.wholeText)

Extraer Precio
Para extraer el precio use la expresion anterior y solo
modifique el h1 por el p en el cual se halla la clase
price_color y luego lo mostré en pantalla con text() y

el método map

Extraer Descripción
Para este reto use algo distinto,
use el //* el cual buscara todo
en todos lados, para especificar
lo que quería use los predicados
y seleccione el atributo
@id="content_inner" , en el cual
seleccione el nodo article y en
este su nodo p y en este use el
wildcard node() . Para mostrarlo

Fundamentos de Web Scrapping con Python y Xpath 16


use el método de toda la vida
map .
Además hice la prueba con text()
en la segunda imagen, es la
misma logica, solo con distinto
método.

Extraer Stock
Para esto solo use las
declaraciones de costumbre.
La respuesta si usáramos node()

seria casí la misma.

Reto Extra

Superamos el reto, el cual era bastante facil!

Por si las moscas


Cuando usar value?
Se usa cuando los queremos acceder al valor de los
atributos
En este caso queremos acceder al atributo title del
nodo a, si quisieramos de la misma forma podríamos
acceder al atributo href

Traer nodos hermanos


Con el uso de esta Axe podrás traer el nodo hermano
siguiente al actual.
following-sibling:: + nodo.

Con esto podremos acceder al nodo hermano


siguiente.

Fundamentos de Web Scrapping con Python y Xpath 17


Proyecto: Scrapper De
Noticias

Fundamentos de Web Scrapping con Python y Xpath 18

También podría gustarte