Python 101 | Scrapping | Primeros pasos
Una buena forma de continuar con el proceso de desarrollo en Python es aplicar los primeros conocimientos adquiridos en algo más tangible que, además, involucre estructuras de datos y gestión de peticiones.
Para este cometido, el scrapping es, sin duda, una buena alternativa.
¿Qué es el scrapping?
El web scraping es una técnica que sirve para extraer información de páginas web de forma automatizada. Si traducimos del inglés su significado vendría a ser algo así como “escarbar una web”.
Es decir, podemos hacer uso de esta utilidad para obtener datos de una página web sin necesidad de manualmente irlos almacenando.
¿Qué es Scrapy?
Scrapy Es un framework desarrollado en Python que nos va a permitir configurar un web scrapper de forma sencilla y con toda la potencia de Python para la gestión de los datos obtenidos
En este primer capítulo, el objetivo será instalar Scrapy y probar su funcionamiento. La idea es ir haciendo pruebas una vez tengamos toda la infraestructura funcionando.
Instalación y configuración
1. Instalación
Es recomendable que, si estamos trabajando bajo Windows, hagamos uso del gestor de paquetes Anaconda que nos va a permitir realizar una instalación limpia y completa del framework Scrapy.
En el caso de que trabajemos con Linux o Mac, la instalación se puede realizar mediante el gestor de paquetes de Python: pip
conda install -c conda-forge scrapy
Lo bueno de realizar este tipo de instalación es que el framework dispone de un instalador de su esqueleto básico que nos va a ahorrar mucho del trabajo inicial de puesta a punto:
scrapy startproject tutorial
Esto nos va a crear en la carpeta tutorial todo el árbol de directorios y archivos básicos para lanzar nuestro scrapper.
2. Configurando el primer spider
El elemento clave de nuestro scrapper va a ser lo que se conoce como spider (araña en inglés). En él se define la lógica de análisis de la web y de extracción de datos:
Un ejemplo basico es el siguiente:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'https://quotes.toscrape.com/page/1/',
'https://quotes.toscrape.com/page/2/',
]
def parse(self, response):
quotes = response.css("span.text::text").getall()
for quote in quotes:
yield {
"quote": quote
}
Como se puede observar, tenemos 3 partes diferenciadas:
La primera es la definición del nombre mediante la variable name
.
En segundo lugar definimos las URLs que vamos a analizar como una lista.
Y por último desarrollamos la lógica de análisis, en la que buscaremos aquellos elementos que queremos obtener y los almacenaremos.
En el caso de ejemplo buscamos el span
con clase text
y extraemos su contenido.
Finalmente, el método parse()
debe devolver un resultado y para ello empleamos la función yield.
3. Ejecutando el spider
Basta con llamar a Scrapy desde la consola de comandos usando como referencia el nombre del spider configurado
scrapy crawl quotes
De esta forma obtenemos como salida de nuestro scrapper los datos almacenados en un objeto de tipo JSON que podemos volcar a cualquier sitio: ya sea un archivo externo, una base de datos o simplemente por pantalla.
La potencia de Scrapy permite realizar consultas complejas a páginas web con un arbol enorme y extraer grandes cantidades de información de forma automatizada.