Creación de un spider con Scrapy
Cree un proyecto de Scrapy, escriba un spider y siga enlaces automáticamente.
Creación de un spider con Scrapy es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
¿Qué es Scrapy?
Scrapy es un framework completo para web scraping, con rastreo asíncrono integrado, pipelines de elementos, middlewares y exportadores.
# pip install scrapy
# Create a project:
# scrapy startproject myspider
# myspider/
# scrapy.cfg
# myspider/
# settings.py
# spiders/
# quotes_spider.pyCreación de un Spider
Herede de scrapy.Spider, establezca name y start_urls y, después, implemente parse().
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ["https://quotes.toscrape.com"]
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(),
}Selectores CSS y XPath
Use response.css("selector") o response.xpath("//xpath") para extraer datos. .get() devuelve la primera coincidencia; .getall() las devuelve todas.
def parse(self, response):
# CSS:
titles = response.css("h2.title::text").getall()
# XPath:
links = response.xpath("//a/@href").getall()
yield {"titles": titles, "links": links}Seguimiento de enlaces
Genere un scrapy.Request para seguir un enlace y analizar la página siguiente.
import scrapy
class Spider(scrapy.Spider):
name = "crawler"
start_urls = ["https://quotes.toscrape.com"]
def parse(self, response):
for quote in response.css("div.quote"):
yield {"text": quote.css("span.text::text").get()}
next_page = response.css("li.next a::attr(href)").get()
if next_page:
yield response.follow(next_page, self.parse)Items e ItemLoaders
Defina clases Item para estructurar los datos extraídos y use ItemLoader para limpiar y transformar los campos.
import scrapy
class ProductItem(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
url = scrapy.Field()
def parse(self, response):
item = ProductItem()
item["name"] = response.css("h1::text").get(strip=True)
item["price"] = response.css(".price::text").re_first(r"[\d.]+")
item["url"] = response.url
yield itemEjecución del Spider
Ejútelo desde el directorio del proyecto. Exporte los datos a JSON, CSV o un pipeline personalizado.
# Run and print to console:
# scrapy crawl quotes
# Save to JSON:
# scrapy crawl quotes -o quotes.json
# Save to CSV:
# scrapy crawl quotes -o quotes.csv
# Scrapy shell for interactive testing:
# scrapy shell "https://quotes.toscrape.com"Configuración: DOWNLOAD_DELAY y CONCURRENT_REQUESTS
Sea respetuoso: añada pausas y limite las solicitudes simultáneas para no sobrecargar los servidores.
# settings.py
DOWNLOAD_DELAY = 1 # 1 second between requests
CONCURRENT_REQUESTS = 8 # max 8 at a time
CONCURRENT_REQUESTS_PER_DOMAIN = 2
ROBOTSTXT_OBEY = True # respect robots.txtMiddlewares
Los middlewares interceptan solicitudes y respuestas. Use los integrados para rotar el user-agent, realizar reintentos y gestionar cookies.
# settings.py
DOWNLOADER_MIDDLEWARES = {
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
"scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
"myspider.middlewares.RotateUserAgentMiddleware": 400,
}Pipelines de elementos
Los pipelines procesan los elementos después del scraping: limpian y validan los datos, eliminan duplicados y los guardan en una base de datos.
# pipelines.py
class CleanPipeline:
def process_item(self, item, spider):
item["name"] = item["name"].strip()
return item
class DBPipeline:
def open_spider(self, spider):
self.conn = connect_db()
def process_item(self, item, spider):
self.conn.insert(dict(item))
return itemGestión del inicio de sesión
Use el FormRequest de Scrapy para enviar un formulario de inicio de sesión y conservar la cookie de sesión.
import scrapy
class AuthSpider(scrapy.Spider):
name = "auth"
login_url = "https://example.com/login"
def start_requests(self):
yield scrapy.Request(self.login_url, self.login)
def login(self, response):
yield scrapy.FormRequest.from_response(
response,
formdata={"user": "me", "pass": "secret"},
callback=self.parse
)scrapy-playwright para páginas con JS
El plugin scrapy-playwright integra Playwright en Scrapy para páginas renderizadas con JavaScript.
# pip install scrapy-playwright
# playwright install
# settings.py:
# DOWNLOAD_HANDLERS = {
# "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
# "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
# }
# In spider:
# yield scrapy.Request(url, meta={"playwright": True})Comprobación rápida
¿Qué hace response.follow(href, callback) en un Spider de Scrapy?
Repaso
Los spiders de Scrapy heredan de scrapy.Spider, declaran start_urls y generan elementos o Requests adicionales con yield desde parse(). Use selectores CSS/XPath, sea respetuoso con DOWNLOAD_DELAY y use pipelines para conservar los datos.
Preguntas frecuentes
¿La lección «Creación de un spider con Scrapy» es gratis?
Sí — el texto completo de «Creación de un spider con Scrapy» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Creación de un spider con Scrapy»?
Cree un proyecto de Scrapy, escriba un spider y siga enlaces automáticamente. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Creación de un spider con Scrapy»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Solicitudes HTTP con requests y httpx
- Análisis de HTML con BeautifulSoup
- Creación de un spider con Scrapy
- Gestión de JavaScript y medidas contra el scraping