Está en la página 1de 33

Fundamentos de Web Scrapping

con Python y Xpath


Autor Pablo Pérez

Date

Fecha de Creación Aug 3, 2020 1158 AM

Notes

Status Finished

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

Fundamentos de Web Scrapping con Python y Xpath 1


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18a1ae6366ab/slidesxpath_c6d75e8b-c8b14359-bbe3
048380ea4e86.pdf

Introducción Web Scrapping


¿Qué es el WebScrapping?

Fundamentos de Web Scrapping con Python y Xpath 2


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

Fundamentos de Web Scrapping con Python y Xpath 3


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 4


 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.

Fundamentos de Web Scrapping con Python y Xpath 5


 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 .

Sobre todo esto se ubica HTTP,


permitiendonos transportar HTML,
CSS, JavaScript, Web API´s.

Fundamentos de Web Scrapping con Python y Xpath 6


Investigar Status Code y como enfrentarnos a estos

Investigar acerca de Cabeceras HTTP

Fundamentos de Web Scrapping con Python y Xpath 7


¿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

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.

Fundamentos de Web Scrapping con Python y Xpath 8


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

Fundamentos de Web Scrapping con Python y Xpath 9


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.

Allow: /Con esta


clausula se permite
la extracción o
manejo de datos a
cualquier parte de la
raiz del sitio.

Con
Disallow: /**

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

Fundamentos de Web Scrapping con Python y Xpath 10


XML Path Language

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bb667149
90d642338314182087092ca0/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


Esta linea de codigo dice
un texto las palabras que empiezan
por la letra a y terminan con la letra o. que queremos extraer el
En este caso seria muy producente
primer titulo de un span que
usar expresiones regulares para esta dentro de un div.
obtener este resultado.

✅ 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.

Fundamentos de Web Scrapping con Python y Xpath 11


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
http://toscrape.com

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

Esquema HTML

Fundamentos de Web Scrapping con Python y Xpath 12


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

Fundamentos de Web Scrapping con Python y Xpath 13


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>

Fundamentos de Web Scrapping con Python y Xpath 14


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 15


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

Fundamentos de Web Scrapping con Python y Xpath 16


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 17


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 ( [] ).

Fundamentos de Web Scrapping con Python y Xpath 18


📌 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

Fundamentos de Web Scrapping con Python y Xpath 19


el shortcut CTRL + SHIFT + C

Esta herramienta nos permite saber el


nodo en el cual se encuetra nuestra
información a extraer.

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

Fundamentos de Web Scrapping con Python y Xpath 20


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
queremos todos los menores que
2.

mayor o igual >=

Al igual que su homologo mayor


que, este se encarga de
seleccionar los elementos mayores

Fundamentos de Web Scrapping con Python y Xpath 21


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

Fundamentos de Web Scrapping con Python y Xpath 22


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

Fundamentos de Web Scrapping con Python y Xpath 23


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
, la cual nos trae
$x('/html/body//div/@*')

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.

Fundamentos de Web Scrapping con Python y Xpath 24


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.

Starts-with
La declaración comienza buscando
todos los nodos small en la cual se
ubican todo los nombres de los
autores, luego usamos predicados
para especificar que clase queremos

Fundamentos de Web Scrapping con Python y Xpath 25


y con que letra queremos que
author

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.

Fundamentos de Web Scrapping con Python y Xpath 26


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
¿Que pasaria si necesitaramos el nodo padre de un nodo? Usariamos a la
expresión .. para acceder a este.

Fundamentos de Web Scrapping con Python y Xpath 27


¿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
azucar
. es

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

Fundamentos de Web Scrapping con Python y Xpath 28


+ nombre del nodo.
descendant::

Descendant nos trae 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 29


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

Fundamentos de Web Scrapping con Python y Xpath 30


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

Fundamentos de Web Scrapping con Python y Xpath 31


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 32


Proyecto: Scrapper
De Noticias

Fundamentos de Web Scrapping con Python y Xpath 33

También podría gustarte