Web Scraping usando lxml y XPath en Python

Prerrequisitos: Introducción al web scrapping

Usando XPath

XPath funciona de manera muy similar a un sistema de archivos tradicional

Diagrama de un sistema de archivos

Para acceder al archivo 1,

C:/File1

Del mismo modo, para acceder al archivo 2,

C:/Documents/User1/File2

Ahora considere una página web simple,

HTML

<html>
   <head>
       <title>My page</title>
   </head>
   <body>
       <h2>Welcome to my page<h2>
      <a href="www.example.com">page</a>
         
<p>This is the first paragraph</p>
  
       <h2>Hello World</h2>
   </body>
</html>

Esto se puede representar como un árbol XML de la siguiente manera,

Árbol XML de la página web

Para obtener el texto dentro de la etiqueta < p> ,

XPath : html/body/p/text()
Result : This is the first paragraph

Para obtener un valor dentro del atributo < href> en el ancla o en la etiqueta < a> ,

XPath : html/body/a/@href
Result: www.example.com

Para obtener el valor dentro de la segunda etiqueta < h2> ,

XPath : html/body/h2[2]/text()
Result: Hello World

Para encontrar el XPath para un elemento particular en una página:

  • Haga clic con el botón derecho en el elemento de la página y haga clic en Inspeccionar.
  • Haga clic con el botón derecho en el elemento en la pestaña Elementos .
  • Haga clic en copiar XPath .

Usando LXML

Enfoque paso a paso

  • Usaremos requests.get para recuperar la página web con nuestros datos.
  • Usamos html.fromstring para analizar el contenido usando el analizador lxml .
  • Creamos la consulta XPath correcta y usamos la función lxml xpath para obtener el elemento requerido.

Ejemplo 1:

A continuación se muestra un programa basado en el enfoque anterior que utiliza una URL particular .

Python

# Import required modules
from lxml import html
import requests
  
# Request the page
page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
  
# Parsing the page
# (We need to use page.content rather than 
# page.text because html.fromstring implicitly
# expects bytes as input.)
tree = html.fromstring(page.content)  
  
# Get element using XPath
buyers = tree.xpath('//div[@title="buyer-name"]/text()')
print(buyers)

Producción:

Ejemplo 2:

Otro ejemplo para un sitio web de comercio electrónico, URL .

Python

# Import required modules
from lxml import html
import requests
  
# Request the page
page = requests.get('https://webscraper.io/test-sites/e-commerce/allinone')
  
# Parsing the page
tree = html.fromstring(page.content)
  
# Get element using XPath
prices = tree.xpath(
    '//div[@class="col-sm-4 col-lg-4 col-md-4"]/div/div[1]/h4[1]/text()')
print(prices)

Producción: 

Publicación traducida automáticamente

Artículo escrito por prakharalt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *