Web Scraping con Django y Scrapy: Extrayendo datos de la web con Python.

Web Scraping con Django y Scrapy: Extrayendo datos de la web con Python

Introducción

El web scraping es una técnica que permite extraer datos de páginas web de forma automática. Esto puede ser útil para una gran variedad de propósitos, como la recopilación de datos para análisis, la creación de bases de datos o la construcción de aplicaciones.

En este tutorial, aprenderemos a realizar web scraping con Django y Scrapy, dos librerías de Python. Django es un framework web que nos ayudará a crear una aplicación web para almacenar los datos extraídos. Scrapy es una librería de web scraping que nos permitirá extraer los datos de las páginas web.

Requisitos

Para seguir este tutorial, necesitarás tener los siguientes requisitos:

  • Python 3.9 o superior
  • Pipenv
  • Django
  • Scrapy

Instalando las librerías

Para instalar las librerías necesarias, ejecuta los siguientes comandos en tu terminal:

pip install pipenv
pipenv install django
pipenv install scrapy

Creando la aplicación web

Para crear la aplicación web, ejecuta el siguiente comando:

django-admin startproject scraping_app

Esto creará una nueva carpeta llamada scraping_app con los archivos necesarios para la aplicación web.

Configurando la aplicación web

Abre el archivo settings.py y agrega las siguientes líneas al final del archivo:

Python
INSTALLED_APPS = [
    ...
    'scraping',
]

MIDDLEWARE = [
    ...
    'scraping.middleware.ScrapingMiddleware',
]

Esto agregará la aplicación scraping a la aplicación web y la registrará un middleware que permitirá que Scrapy acceda a la base de datos de Django.

Creando el spider

Un spider es un componente de Scrapy que se encarga de extraer los datos de las páginas web. Para crear un spider, ejecuta el siguiente comando:

scrapy startproject scraping

Esto creará una nueva carpeta llamada scraping con los archivos necesarios para el spider.

Abre el archivo spiders/index.py y agrega el siguiente código:

Python
import scrapy


class IndexSpider(scrapy.Spider):
    name = 'index'

    def start_requests(self):
        urls = ['https://www.example.com']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        for article in response.css('article'):
            title = article.css('h2 a::text').get()
            link = article.css('h2 a::attr(href)').get()
            yield {
                'title': title,
                'link': link,
            }

Este código crea un spider que extrae el título y el enlace de cada artículo de la página web https://www.example.com.

Ejecutando el spider

Para ejecutar el spider, ejecuta el siguiente comando:

scrapy crawl index

Esto ejecutará el spider y almacenará los datos extraídos en la base de datos de Django.

Conclusión

En este tutorial, aprendimos a realizar web scraping con Django y Scrapy. Con estas librerías, podemos extraer datos de páginas web de forma automática y almacenarlos en una base de datos.

Apéndice

Código completo

Python
# settings.py

INSTALLED_APPS = [
    ...
    'scraping',
]

MIDDLEWARE = [
    ...
    'scraping.middleware.ScrapingMiddleware',
]

# spiders/index.py

import scrapy


class IndexSpider(scrapy.Spider):
    name = 'index'

    def start_requests(self):
        urls = ['https://www.example.com']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        for article in response.css('article'):
            title = article.css('h2 a::text').get()
            link = article.css('h2 a::attr(href)').get()
            yield {
                'title': title,
                'link': link,