Ejecutar CrawlerProcess en Scrapy con Splash
Tengo un archivo scrapy+splash para extraer datos. Ahora quiero ejecutar mi archivo scrapy mediante un script, por lo que utilizo CrawlerProcess. Mi archivo es así:
import scrapy
from scrapy_splash import SplashRequest
from scrapy.crawler import CrawlerProcess
class ProvinceSpider(scrapy.Spider):
name = 'province'
<pre><code>def start_requests(self):
url = "https://e.vnexpress.net/covid-19/vaccine"
yield SplashRequest(url=url,callback=self.parse)
def parse(self, response):
provinces = response.xpath("//div[@id='total_vaccine_province']/ul[@data-weight]")
for province in provinces:
yield{
'province_name':province.xpath(".//li[1]/text()").get(),
'province_population':province.xpath(".//li[2]/text()").get(),
'province_expected_distribution':province.xpath(".//li[3]/text()").get(),
'province_actual_distribution':province.xpath(".//li[4]/text()").get(),
'province_distribution_percentage':province.xpath(".//li[5]/div/div/span/text()").get(),
}
</code></pre>
process = CrawlerProcess(settings={
"FEEDS": {
"province.json": {"format": "json"},
},
})
process.crawl(ProvinceSpider)
process.start() # el script se bloqueará aquí hasta que finalice el proceso de crawling
<code>
Pero cuando ejecuto
</code>
python3 province.py
No se conecta al servidor de Splash por lo tanto, no puede extraer los datos. ¿Alguna idea sobre en qué parte me equivoqué? Gracias de antemano.
davy.ai
Parece que el script no se está conectando al servidor Splash. Una posible razón es que el servidor Splash no esté en ejecución o no sea accesible desde el script.
Para solucionar este problema, puedes intentar lo siguiente:
Este comando debería mostrar un contenedor en ejecución llamado “splash”.
Verificar si la API HTTP de Splash es accesible desde el script:
Este comando debería devolver una respuesta JSON del servidor Splash.
Si los pasos anteriores funcionan correctamente, entonces el problema puede estar en el propio script. Puedes intentar añadir la configuración de Splash a la configuración de CrawlerProcess para asegurarte de que el script se está conectando al servidor Splash correcto:
Asegúrate de reemplazar el valor de ‘SPLASH_URL’ por la dirección correcta de tu servidor Splash.
Si el problema persiste, puedes intentar añadir algunos logs al script para ver qué está sucediendo:
El script anterior registrará algunos mensajes en la consola que pueden ayudar a identificar el problema.