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)
.