0.1.0 • Published 10 months ago

@xkairo/scrapy-puppeteer-plugin v0.1.0

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

Scrapy puppeteer plugin

Este es un servicio que provee la funcionalidad de puppeteer para la libreria Scrapy . Permite el uso de plugins de puppeteer-extra-plugin, inyectandolos en una propiedad plugins dentro de providers y unicamente es una capa sobre el modulo de puppeteer. Este servicio es el que se usa en el ejemplo de uso.

Instalacion

Antes debe tener instalado la libreria scrapy para poder utilizarlo en ella

    npm i @xkairo/scrapy

Despues de instalar scrap, ya puede instalar esta libreria

    npm i @xkairo/scrapy-puppeteer-plugin

Configuracion

Para agregar una configuracion a puppeteer debe usar un provider, en el cual agregaras los plugins propios de puppeteer-plugin-extra y la configuracion de la instancia de puppeteer. El provider debera agregarlo en la configuracion de scrapy.

    export const puppeteerProvider: Registable = {
        plugins: {
            useValue: [],
        },
        config: {
            useValue: {
                headless: true,
            },
        },
    };
    const filepath = join(__dirname, "result.csv");
    const config: ScraperConfigInterface<UserInterface> = {
      uploaders: [LocalUploader],
      processors: [CsvProcessor],
      scrapers: [PageScraper],
      services: [Puppeteer], // <---- Note como aca se agrega el servicio para luego injectarlo
      providers: [
        puppeteerProvider, // <---- Note como se carga el provider con la configuracion
        {
          filepath: {
            useValue: filepath,
          },
        },
      ],
      exceptionHandler: ExceptionHandler,
    };

    const scraper = new Scraper(config);

    await scraper.init();

Uso

Hay que tener en cuenta que la libreria scrapy utiliza un sistema de injeccion de dependencias con inversion de control, por lo que usted no deberia instanciar este servicio, sino que injectarlo.

    constructor(
        @Inject(Puppeteer) private puppeteerService: Puppeteer
    ) {}

Luego podra acceder al browser con getBrowser:

    async commonFunction() {
        const browser = await this.puppeteerService.getBrowser(); // <---- Obtenemos un browser de puppeteer

        browser.newPage() // <---- Puedes usar cualquier metodo de browser
    }