logotipo proxyscrape oscuro

Web Scraping Para Principiantes: Conceptos Básicos y Framework Usando Python

Python, Scraping, Mar-01-20215 minutos de lectura

El web scraping es el arte de extraer datos de un sitio web de forma automatizada y bien estructurada. Puede haber diferentes formatos para el scraping de datos, como Excel, CSV y muchos más. Algunos casos prácticos de uso del web scraping son la investigación de mercado, la supervisión de precios, la inteligencia de precios, la investigación de mercado y la generación de clientes potenciales. El web scraping es una técnica instrumental para hacer el mejor uso de los datos disponibles públicamente y tomar decisiones más inteligentes. Por lo tanto, es bueno que todo el mundo conozca al menos los conceptos básicos del web scraping para beneficiarse de él.

Este artículo cubrirá los fundamentos del web scraping jugando con el framework de Python llamado Beautiful Soup. Utilizaremos Google Colab como entorno de codificación.

Pasos implicados en el Web Scraping utilizando Python

  1. En primer lugar, tenemos que identificar la página web que queremos raspar y enviar una petición HTTP a esa URL. Como respuesta, el servidor devuelve el contenido HTML de la página web. Para esta tarea, utilizaremos una biblioteca HTTP de terceros para gestionar las peticiones de Python.
  2. Una vez que hemos conseguido acceder al contenido HTML, la tarea principal consiste en analizar los datos. No podemos procesar los datos simplemente mediante el procesamiento de cadenas, ya que la mayoría de los datos HTML están anidados. Ahí es donde entra en juego el analizador sintáctico, que crea una estructura de árbol anidada de los datos HTML. Una de las bibliotecas de analizadores HTML más avanzadas es html5lib.
  3. A continuación viene el recorrido del árbol, que implica navegar y buscar en el árbol de análisis sintáctico. Para este propósito, vamos a utilizar Beautiful Soup (una biblioteca de Python de terceros). Esta biblioteca de Python se utiliza para extraer datos de archivos HTML y XML.

Ahora hemos visto cómo funciona el proceso de web scraping. Vamos a empezar con la codificación,

Paso 1: Instalación de bibliotecas de terceros

En la mayoría de los casos, Colab viene con paquetes de terceros ya instalados. Pero aún así, si sus sentencias import no funcionan, puede resolver este problema instalando algunos paquetes mediante los siguientes comandos, 

pip install peticiones
pip install html5lib
pip install bs4
Paso 2: Acceder al contenido HTML desde la página web
importar solicitudes 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.contenido)

Mostrará la salida del formulario,

Intentemos entender este trozo de código,

  1. En la primera línea de código, estamos importando la biblioteca de peticiones.
  2. A continuación, especificamos la URL de la página web que queremos raspar.
  3. En la tercera línea de código, enviamos la petición HTTP a la URL especificada y guardamos la respuesta del servidor en un objeto llamado r.
  4. Por último, print(r.content) devuelve el contenido HTML en bruto de la página web.
Paso 3: Análisis del contenido HTML
importar peticiones 
from bs4 import BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # Si esta línea provoca un error, ejecuta 'pip install html5lib' o instala html5lib 
print(soup.prettify())
Salida:

Da una salida muy larga; a continuación se adjuntan algunas capturas de pantalla.

Una de las mejores cosas de Beautiful Soup es que está construido sobre las bibliotecas de análisis HTML como html5lib, html.parse, lxml etc que permite que el objeto de Beautiful Soap y especificar la biblioteca de análisis se creen simultáneamente. 

En el código anterior, hemos creado el objeto Beautiful Soup pasando dos argumentos:

r.content: Contenido HTML sin procesar.
html5lib: Especifica el analizador HTML que queremos utilizar.

Por último, se imprime soup.prettify(), que ofrece una representación visual del árbol de análisis a partir del contenido HTML sin procesar.

Paso 4: Búsqueda y navegación por el árbol de análisis sintáctico

Ahora es el momento de extraer algunos de los datos útiles del contenido HTML. Los objetos sopa contienen los datos en forma de estructura anidada, que pueden extraerse mediante programación. En nuestro caso, estamos raspando una página web que consiste en algunas citas. Así que vamos a crear un programa que resuelve estas citas. El código se da a continuación,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Antes de seguir adelante, se recomienda revisar el contenido HTML de la página web, que imprimimos utilizando el método soup.prettify() e intentar encontrar un patrón para navegar a las citas.

Ahora explicaré cómo conseguimos esto en el código anterior, 

Si navegamos a través de las comillas, encontraremos que todas las comillas están dentro de un contenedor div cuyo id es 'all_quotes'. Así que encontramos ese elemento div (denominado tabla en el código) utilizando el método find():

table = soup.find('div', attrs = {'id':'all_quotes'})

El primer argumento de esta función es la etiqueta HTML que debe buscarse. El segundo argumento es un elemento de tipo diccionario para especificar los atributos adicionales asociados con esa etiqueta. método find() devuelve el primer elemento coincidente. Se puede probar table.prettify() para tener una mejor idea de lo que hace este trozo de código.

Si nos centramos en el elemento tabla, el contenedor div contiene cada cita cuya clase es cita. Así que haremos un bucle a través de cada contenedor div cuya clase sea quote.

Aquí es muy útil el método findAll() que es similar al método find() en cuanto a los argumentos, pero la mayor diferencia es que devuelve una lista de todos los elementos coincidentes. 

Estamos iterando a través de cada cita utilizando una variable llamada fila.

Analicemos un ejemplo de contenido de fila HTML para comprenderlo mejor:

Ahora considere el siguiente fragmento de código:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
Aquí estamos creando un diccionario para guardar toda la información sobre una cita. La notación de puntos se utiliza para acceder a la estructura anidada. Para acceder al texto dentro del elemento HTML, utilizamos .text:

Además, también podemos añadir, eliminar, modificar y acceder a los atributos de las etiquetas. Para ello, tratamos la etiqueta como un diccionario:

quote['url'] = fila.a['href']
Luego hemos añadido todas las comillas a la lista llamada comillas. 

Por último, generaremos un archivo CSV, que utilizaremos para guardar nuestros datos.

nombre_archivo = 'citas_inspirativas.csv'

Hemos llamado a nuestro archivo inspirational_qoutes.csv y hemos guardado en él todas las citas para utilizarlas también en el futuro. Este es el aspecto de nuestro archivo inspirational_quotes.csv,

En la salida anterior, sólo hemos mostrado tres filas, pero en realidad hay 33 filas. Esto significa que hemos extraído una cantidad considerable de datos de la página web con un simple intento. 

Nota: En algunos casos, el web scraping se considera ilegal, lo que puede provocar el bloqueo permanente de tu dirección IP por parte del sitio web. Así que debes tener cuidado y raspar solo aquellos sitios y páginas web que lo permitan. 

¿Por qué utilizar el Web Scraping?

Algunos de los escenarios del mundo real en los que el web scraping podría tener una utilidad masiva son,

Generación de clientes potenciales
Una de las actividades de ventas críticas para la mayoría de las empresas es la generación de leads. Según un informe de Hubspot, la generación de tráfico y clientes potenciales era la prioridad número uno del 61% de los profesionales del marketing entrante. El scraping web puede desempeñar un papel importante al permitir a los profesionales del marketing acceder a listas estructuradas de clientes potenciales en Internet.
Estudios de mercado 

Realizar un estudio de mercado adecuado es el elemento más importante de toda empresa en funcionamiento y, por lo tanto, requiere información muy precisa. El análisis de mercado se nutre de un gran volumen de datos, de alta calidad y muy perspicaces, que pueden ser de diferentes tamaños y formas. Estos datos pueden ser una herramienta muy útil para realizar inteligencia empresarial. El estudio de mercado se centra principalmente en los siguientes aspectos empresariales:

  • Puede utilizarse para analizar las tendencias del mercado.
  • Puede ayudarnos a predecir los precios del mercado.
  • Permite optimizar los puntos de entrada en función de las necesidades del cliente.
  • Puede ser muy útil para vigilar a los competidores.
Crear anuncios

El web scraping puede ser una técnica muy útil y fructífera para crear los listados según los tipos de negocio, por ejemplo, inmobiliarias y tiendas de comercio electrónico. Una herramienta de web scraping puede ayudar a la empresa a examinar miles de listados de productos de la competencia en su tienda y recopilar toda la información necesaria, como precios, detalles del producto, variantes y opiniones. Se puede hacer en sólo unas horas, lo que puede ayudar aún más a crear listados propios, centrándose así más en las demandas de los clientes.

Comparar información

El raspado web ayuda a varias empresas a recopilar y comparar información y a proporcionar esos datos de forma significativa. Pensemos en los sitios web de comparación de precios que extraen opiniones, características y todos los detalles esenciales de otros sitios web. Estos datos pueden recopilarse y adaptarse para facilitar el acceso. Así, se puede generar una lista de diferentes minoristas cuando el comprador busca un producto concreto. De este modo, el web scraping facilitará enormemente el proceso de toma de decisiones al consumidor, mostrándole diversos análisis de productos en función de su demanda.

Información agregada

El web scraping puede ayudar a agregar la información y mostrarla de forma organizada al usuario. Consideremos el caso de los agregadores de noticias. El web scraping se utilizará de las siguientes maneras,

  1. El web scraping permite recopilar los artículos más precisos y pertinentes.
  2. Puede ayudar a recopilar enlaces de vídeos y artículos útiles.
  3. Construye líneas de tiempo según las noticias.
  4. Captar las tendencias según los lectores de las noticias.

Así que en este artículo, hemos hecho un análisis en profundidad de cómo funciona el web scraping considerando un caso de uso práctico. También hemos hecho un ejercicio muy sencillo sobre la creación de un simple web scraper en Python. Ahora puedes scrapear cualquier otro sitio web de tu elección. Además, también hemos visto algunos escenarios del mundo real en los que el web scraping puede desempeñar un papel importante. Esperamos que hayas disfrutado del artículo y que todo haya sido claro, interesante y comprensible.  

Si está buscando servicios proxy increíbles para sus proyectos de web scraping, no olvide echar un vistazo a ProxyScrapeproxies residenciales y premium.