| name | scrapy-web-scraping |
| description | Framework de scraping web más popular de Python — extensible, asíncrono, con middleware, pipelines y scraping a escala. |
| version | 1.0.0 |
| tags | ["scraping","web","python","async","crawler","middleware"] |
Scrapy — Framework de Scraping Web
Resumen
Framework de scraping web más popular de Python — extensible, asíncrono, con middleware y pipelines. 62k⭐.
Repo de referencia
- GitHub:
github.com/scrapy/scrapy
- Lenguaje: Python
- Licencia: BSD
Instalación
pip install scrapy
pip install scrapy-splash
pip install scrapy-redis
Uso Básico
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
start_urls = ["https://example.com"]
def parse(self, response):
for href in response.css("a::attr(href)").getall():
yield response.follow(href, self.parse)
yield {
'title': response.css('h1::text').get(),
'text': response.css('p::text').getall(),
}
Ejecutar
scrapy crawl example -o results.json
scrapy crawl example -o results.csv
scrapy crawl example -s LOG_LEVEL=DEBUG
Patrones Clave
- Middlewares: Rotación de user-agents, proxies, headers
- Pipelines: Guardar en SQLite, MongoDB, PostgreSQL
- Item Loaders: Transformación y validación de datos
- Distributed: Scrapy-Redis para scraping distribuido
- Headless browser: Splash o Playwright para JS rendering
Integración con Mastermind
- Reemplaza
BeautifulSoup + requests para scraping a escala
- Ideal para government data pipelines (BOE, BORME, etc.)
- Complementa
firecrawl-web-scraping (scrapy programable, firecrawl API-based)
- Útil para static-digest-pipeline
Pitfalls
- JavaScript: Scrapy no ejecuta JS. Usa Splash o Playwright para contenido dinámico.
- Rate limiting: Configurar
DOWNLOAD_DELAY para no saturar servidores.
- Robots.txt: Respetar robots.txt con
ROBOTSTXT_OBEY = True.
- Memory: Para sitios grandes, usar
itemproc con pipelines asíncronos.
Referencias