follow example espaƱol docs python web-scraping scrapy scrapy-splash scrapy-shell

python - example - Scrapy Shell y Scrapy Splash



scrapy python 3 (2)

Hemos estado utilizando el middleware scrapy-splash para pasar el código fuente HTML scrapy-splash a través del motor de JavaScript de Splash que se ejecuta dentro de un contenedor acoplable.

Si queremos utilizar Splash en la araña, configuramos varias configuraciones de proyecto requeridas y obtenemos una Request especificando meta argumentos específicos:

yield Request(url, self.parse_result, meta={ ''splash'': { ''args'': { # set rendering arguments here ''html'': 1, ''png'': 1, # ''url'' is prefilled from request url }, # optional parameters ''endpoint'': ''render.json'', # optional; default is render.json ''splash_url'': ''<url>'', # overrides SPLASH_URL ''slot_policy'': scrapyjs.SlotPolicy.PER_DOMAIN, } })

Esto funciona como está documentado. Pero, ¿cómo podemos usar scrapy-splash dentro de Scrapy Shell ?


simplemente envuelva la URL que desea shell en splash http api .

Entonces querrías algo como:

scrapy shell ''http://localhost:8050/render.html?url=http://domain.com/page-with-javascript.html&timeout=10&wait=0.5''

donde localhost:port es donde se ejecuta su servicio splash
url es url que desea rastrear y no se olvide de urlquote !
render.html es uno de los posibles puntos finales http api, devuelve la página html redered en este caso
timeout en segundos para el tiempo de espera
tiempo de wait en segundos para esperar a que se ejecute javascript antes de leer / guardar el html.


Puede ejecutar el scrapy shell sin argumentos dentro de un proyecto de Scrapy configurado, luego cree req = scrapy_splash.SplashRequest(url, ...) y llame a fetch(req) .