Skip to main content

Una biblioteca avanzada para extraer datos de Pinterest sin necesidad de API

Project description

PinScrap स्क्रैप

PyPI version License: MIT Python 3.8+ Code style: black

Una biblioteca avanzada y asíncrona para extraer datos de Pinterest sin necesidad de una API oficial. Diseñada para ser rápida, confiable y fácil de usar.

⚠️ Advertencia Importante

Este proyecto realiza scraping en Pinterest. El uso de esta biblioteca debe cumplir con los Términos de Servicio de Pinterest y las leyes de propiedad intelectual aplicables. Úsala de manera responsable y bajo tu propio riesgo.


🚀 Características Principales

  • Búsqueda Avanzada: Encuentra pines por palabras clave con soporte para paginación.
  • Información Detallada: Obtén metadatos completos de cualquier pin.
  • Descarga de Imágenes: Descarga imágenes en alta calidad de forma asíncrona.
  • Perfiles de Usuario: Explora los pines de cualquier usuario de Pinterest.
  • Tipado Estático: Mejor experiencia de desarrollo con tipos anotados.
  • Asíncrono: Máximo rendimiento con asyncio y Playwright.
  • Robusto: Manejo de errores y reintentos automáticos.

📦 Instalación

pip install pinscrap

Instala los navegadores necesarios para Playwright:

playwright install

🚀 Ejemplos Rápidos

Búsqueda de Pines

import asyncio
from pinscrap import PinScrapClient

async def main():
    client = PinScrapClient(headless=True)
    try:
        # Buscar pines
        result = await client.search("programación python", limit=5)
        
        print(f"Encontrados {result.pin_count} pines:")
        for i, pin in enumerate(result.pins, 1):
            print(f"\n{i}. {pin.description or 'Sin descripción'}")
            print(f"   URL: {pin.image_url}")
            if pin.creator:
                print(f"   Por: {pin.creator.username}")
    finally:
        await client.close()

asyncio.run(main())

Descargar Imágenes

import asyncio
from pathlib import Path
from pinscrap import PinScrapClient, batch_download

async def main():
    client = PinScrapClient(headless=True)
    try:
        # Buscar pines
        result = await client.search("gatitos", limit=3)
        
        # Descargar imágenes
        download_dir = Path("descargas_gatitos")
        download_dir.mkdir(exist_ok=True)
        
        urls = [pin.image_url for pin in result.pins if pin.image_url]
        downloaded = await batch_download(urls, directory=download_dir)
        
        print(f"\n¡Descargadas {len(downloaded)} imágenes en '{download_dir}/'!")
    finally:
        await client.close()

asyncio.run(main())

Obtener Información de un Pin

import asyncio
from pinscrap import PinScrapClient

async def main():
    client = PinScrapClient(headless=True)
    try:
        pin = await client.get_pin_info("https://www.pinterest.com/pin/1234567890/")
        print(f"Descripción: {pin.description}")
        print(f"Imagen: {pin.image_url}")
        if pin.creator:
            print(f"Creador: {pin.creator.username}")
    finally:
        await client.close()

asyncio.run(main())

📚 Documentación Completa

Clase PinScrapClient

Métodos Principales

  • search(query: str, limit: int = 50) -> SearchResult

    • Busca pines en Pinterest.
    • query: Término de búsqueda.
    • limit: Número máximo de pines a devolver.
  • get_pin_info(pin_url: str) -> Optional[Pin]

    • Obtiene información detallada de un pin.
    • pin_url: URL completa del pin.
  • get_user_pins(username: str, limit: int = 50) -> List[Pin]

    • Obtiene los pines de un usuario.
    • username: Nombre de usuario en Pinterest.
    • limit: Número máximo de pines a devolver.

Funciones de Utilidad

  • download_pin_image(url, directory, filename=None)

    • Descarga una imagen de un pin.
  • batch_download(urls, directory, max_concurrent=5)

    • Descarga múltiples imágenes de forma concurrente.

🛠️ Manejo de Errores

La biblioteca incluye excepciones específicas para un mejor manejo de errores:

  • PinScrapException: Clase base para todos los errores.
  • PinterestInteractionException: Error al interactuar con Pinterest.
  • PinNotFoundError: No se encontró el pin solicitado.
  • InvalidPinUrlError: URL de pin inválida.
  • RateLimitExceededError: Límite de solicitudes excedido.
  • NetworkError: Error de red.

🤝 Contribuir

¡Las contribuciones son bienvenidas! Por favor, lee nuestras pautas de contribución antes de enviar un pull request.

📄 Licencia

Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más información.

🌟 Desarrollado por Patchyn

Este proyecto es mantenido por el equipo de Patchyn. ¡Gracias por usarlo! ❤️

GitHub stats

📊 Estadísticas

GitHub Stats Top Langs


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pinscrap-0.1.1.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pinscrap-0.1.1-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file pinscrap-0.1.1.tar.gz.

File metadata

  • Download URL: pinscrap-0.1.1.tar.gz
  • Upload date:
  • Size: 14.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for pinscrap-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e9e1445e88f96c58c77c9cf4342b1c9e4915c34317d70c46f4b30017f9b29234
MD5 c0f156c34f4f3b6f691ef98ec2205701
BLAKE2b-256 bbd153f1295450057730462b8be42d09bb57cdba4736e314c98b1226db97b7c1

See more details on using hashes here.

File details

Details for the file pinscrap-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pinscrap-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for pinscrap-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 713b52132cf76853da36f97ba46f85f55af76a035e8e79d9e682fc2bcba73184
MD5 e9379a4988b4ad11d2a1b99efd76bd1b
BLAKE2b-256 d03698b8c10f13f618c812912fdc6329be37fde75a49386d1197769f96edd158

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page