Geonode logo
Carl Gamutan

Carl Gamutan

Actualizado: 7 de octubre de 2026

Publicado: 13 de febrero de 2023

Guía para principiantes sobre Scrapy

Scrapy es un marco de trabajo de código abierto para el rastreo web que cualquier persona puede utilizar de forma gratuita en Internet. Scrapy se utiliza principalmente para el rastreo y la extracción de datos de la web. Es una forma rápida y sencilla de extraer datos de cualquier página web, y actualmente Zyte se encarga de su mantenimiento.

Scrapy es un marco de trabajo de código abierto para el rastreo web que cualquiera puede utilizar de forma gratuita en Internet. Scrapy se utiliza principalmente para el rastreo web y el web scraping. Es una forma rápida y sencilla de extraer datos de cualquier página web, y actualmente Zyte se encarga de su mantenimiento.

Instalación de Scrapy

Para instalar Scrapy, necesitas una versión de Python 3.7 o superior. También se recomienda instalarlo en un entorno virtual dedicado (virtualenv), para evitar cualquier conflicto que pueda surgir con los paquetes de tu sistema.

Descarga Scrapy en tu plataforma preferida.

Para instalar Scrapy, debes instalar Anaconda o Miniconda, abrir Python y ejecutar el comando:

conda install -c conda-forge scrapy

Como alternativa, también puedes ejecutar:

pip install Scrapy

Si utilizas un sistema Ubuntu, primero debes instalar todas estas dependencias:

sudo apt-get install python3 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

Si utilizas un sistema macOS, tendrás que instalar las herramientas de línea de comandos de Xcode. Abre una ventana de terminal y ejecuta:

xcode-select --install

¡Enhorabuena! Ya has instalado Scrapy en tu dispositivo. Ahora podemos probar a rastrear una página web y extraer sus datos.

Iniciar un proyecto de Scrapy

Para iniciar un nuevo proyecto de Scrapy, debes indicar el directorio en el que deseas que se guarde tu código. Debes ejecutar:

scrapy startproject scrapetest

Al ejecutar este comando, se creará un directorio llamado «scrapetest» que contendrá lo siguiente:

_scrapetest/ scrapy.cfg # archivo de configuración de despliegue

scrapetest/             # módulo Python del proyecto; desde aquí importarás tu código
    __init__.py

    items.py          

    middlewares.py   

    pipelines.py      

    settings.py       

    spiders/          # un directorio donde más adelante colocarás tus arañas
        __init__.py

_

Una vez iniciado un proyecto de Scrapy, ahora tienes que crear una araña (spider). Una araña es necesaria porque es la que utiliza Scrapy para extraer información de una página web. A modo de ejemplo, vamos a rastrear la página web «quotes.toscrape.com».

En primer lugar, debes ejecutar el código:

_import scrapy

class QuotesSpider(scrapy.Spider): name = "test" # Los nombres de las arañas deben ser únicos para cada araña que crees

def start_requests(self):
    urls = [
        'https://quotes.toscrape.com/page/1/',
        # Cambia estas URL por

las páginas web que quieras rastrear 'https://quotes.toscrape.com/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
    page = response.url.split("/")[-2]
    filename = f'quotes-{page}.html'
    with open(filename, 'wb') as f:
        f.write(response.body)
    self.log(f'Archivo guardado {filename}')

_

Para que el rastreador comience a rastrear, debes ejecutar:

scrapy crawl test

A continuación, deberías obtener un resultado que indique que has rastreado el sitio web «quotes.toscrape.com».

Si quieres extraer determinados datos de una página web, puedes utilizar la palabra clave «yield» de Python y ejecutar el código:

_import scrapy

class QuotesSpider(scrapy.Spider): name = "test" start_urls = [ 'https://quotes.toscrape.com/page/1/', 'https://quotes.toscrape.com/page/2/', ]

def parse(self, response):
    for quote in response.css('div.quote'):
        yield {
            'text': quote.css('span.text::text').get(),
            'author': quote.css('small.author::text').get(),
            'tags': quote.css('div.tags a.tag::text').getall(),
        }

_

Este código extrae los textos, el autor y las etiquetas de la página web que has rastreado, que se mostrarán en el registro.

Si quieres rastrear todas las páginas de un sitio web, en lugar de solo páginas específicas, puedes ejecutar:

_import scrapy

class QuotesSpider(scrapy.Spider): name = "test" start_urls = [ 'https://quotes.toscrape.com/page/1/', ]

def parse(self, response):
    for quote in response.css('div.quote'):
        yield {
            'text': quote.css('span.text::text').get(),
            'author': quote.css('small.author::text').get(),
            'tags': quote.css('div.tags a.tag::text').getall(),
        }

    next_page = response.css('li.next a::attr(href)').get()
    if next_page is not None:
        next_page = response.urljoin(next_page)
        yield scrapy.Request(next_page, callback=self.parse)

_

Ahora, tienes que almacenar los datos que ha extraído la araña. Para guardar los datos extraídos, simplemente ejecuta:

scrapy crawl test -O test.json

Si quieres añadir cualquier contenido nuevo a un archivo ya existente, puedes ejecutar este código en su lugar:

scrapy crawl quotes -o quotes.jsonl

¡Enhorabuena! Has terminado de extraer y almacenar los datos que has recopilado con Scrapy. Aún puedes añadir algo para garantizar que el scraping web con Scrapy se realice con éxito, y es utilizar los proxies de Scrapy.

Configuración de los proxies de Scrapy

Un proxy de Scrapy se encargará de gestionar todas tus solicitudes web, por lo que cualquier sitio web del que extraigas datos solo podrá ver la dirección IP del servidor proxy. Tu dirección IP quedará completamente oculta. Al rotar continuamente las direcciones IP y utilizar proxies residenciales, se engañará a los sitios web para que crean que tus solicitudes proceden de usuarios reales y no de alguien que utiliza un bot de rastreo web como Scrapy.

A modo de ejemplo, utilizaremos un proxy de Geonode. Puedes pasar directamente a «Obtener los datos del servidor proxy con Geonode» si aún no has obtenido los datos de tu proxy de Geonode.

Hay dos métodos para configurar un proxy en Scrapy.

El primer método consiste en utilizar el middleware de Scrapy, denominado HTTPProxyMiddleware, que configura automáticamente tu parámetro de proxy como proxy predeterminado.

Puedes ejecutar:

_def start_requests(self): for url in self.start_urls: return Request(url=url, callback=self.parse, headers={"User-Agent": "My UserAgent"}, meta={"proxy": "premium-residential.geonode.com:9001"}) _

El segundo método consistiría en crear tu propio middleware. Este método es más aislado y te ofrece un mayor grado de libertad.

Puedes ejecutar:

_from w3lib.http import basic_auth_header

DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.CustomProxyMiddleware': 350, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400, }

class CustomProxyMiddleware(object): def process_request(self, request, spider): request.meta[“proxy”] = "premium-residential.geonode.com:9001" request.headers[“Proxy-Authorization”] = basic_auth_header(“geonode_xbYe9H2LYr”, “9806022c-cd4a-4776-a053-73fee44344dd”) _

¡Enhorabuena! Ya has añadido un servidor proxy para rastrear cualquier sitio web con Scrapy. Si quieres comprobar si tu proxy funciona, puedes visitar https://www.geonode.com/what-is-my-ip.

Cómo obtener los datos del servidor proxy con Geonode

Paso 1. Entra en **Geonode

** e inicia sesión con tu cuenta actual o regístrate para crear una nueva.

geonodelogin.png

Paso 2. En la página de inicio, haz clic en «Servicios residenciales».

GeonodeNew1.png

Paso 3. Desplázate hacia abajo hasta que veas «Puntos finales».

geonodenew1.png

Paso 4. Elige qué «Protocolo de proxy» deseas utilizar: «Protocolo HTTP» o **«[Protocolo SOCKS5

](https://geonode.com/blog/beginners-guide-to-socks5-proxies)»**.

geonodenew1.png

Paso 5. Selecciona qué «Tipo de sesión» deseas utilizar: «Proxy rotativo» o Proxy fijo.

geonodenew3.png

Paso 6. Elige qué proxy quieres utilizar. A modo de ejemplo, utilizaremos el proxy resaltado **«premium-residential.geonode

.com:9001»**.

geonodenew4.png

Si quieres utilizar una dirección IP en lugar de un DNS, simplemente desactiva el botón «Mostrar DNS» y aparecerán las direcciones IP.

geonodenew5.png

Paso 7. Ahora necesitas los «Datos de autenticación» de tu cuenta de proxy. En el caso de Geonode

, se encuentran en la página de inicio de tu cuenta.

GeonodeNew2.png