es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En Scrapy, ¿cómo proceder para analizar el método después de obtener HTTP403?

Estoy tratando de extraer información de un sitio web que devuelve HTTP403 si JavaScript no está habilitado.

La metodología que estoy intentando implementar es la siguiente:
En el método “parse”, el controlador de Selenium obtiene la URL de “response.requets.url” y accede a la página.

Pero el problema que estoy enfrentando es que Selenium cierra automáticamente la solicitud después de recibir el HTTP403 y no ingresa al método “parse”.

Aquí está mi código:

class SampleSpider(scrapy.Spider):

    name = "sample_spider"
    start_urls = ["https://website_that_returning_403.com"]

    def parse(self, response):
        bot = webdriver.Chrome()
        bot.get(response.request.url)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Si te encuentras con un problema en el que Selenium cierra automáticamente la solicitud después de recibir un error HTTP 403 y no ingresa al método de análisis, puedes intentar modificar tu código para solucionar este problema. Aquí hay algunas soluciones posibles:

    1. Usa WebDriverWait para esperar a que la página se cargue:
         “`python
         class SampleSpider(scrapy.Spider):
             name = “sample_spider”
             start_urls = [“https://website_that_returning_403.com”]

           def parse(self, response):
               bot = webdriver.Chrome()
               bot.get(response.request.url)
               try:
                   WebDriverWait(bot, 10).until(EC.presence_of_element_located((By.XPATH, “//body”)))
               except TimeoutException:
                   bot.quit()
               finally:
                   # Raspa la página aquí
       “`

       En este ejemplo, estamos utilizando WebDriverWait para esperar a que la página se cargue antes de continuar con el raspado de los datos. Si la página no se carga dentro de los 10 segundos, cerramos el controlador de Selenium.

    1. Configura las opciones del controlador web para habilitar JavaScript:
         “`python
         class SampleSpider(scrapy.Spider):
             name = “sample_spider”
             start_urls = [“https://website_that_returning_403.com”]

           def init(self):
               options = webdriver.ChromeOptions()
               options.add_argument(“–enable-javascript”)
               self.bot = webdriver.Chrome(options=options)

           def parse(self, response):
               self.bot.get(response.request.url)
               # Raspa la página aquí
       “`

       En este ejemplo, estamos configurando las opciones de Chrome para habilitar JavaScript al ejecutar el controlador de Selenium. Esto debería permitir que la página se cargue correctamente y evitar que ocurra el error 403.

    1. Usa un navegador sin cabeza:
         “`python
         class SampleSpider(scrapy.Spider):
             name = “sample_spider”
             start_urls = [“https://website_that_returning_403.com”]

           def init(self):
               options = webdriver.ChromeOptions()
               options.add_argument(“–headless”)
               self.bot = webdriver.Chrome(options=options)

           def parse(self, response):
               self.bot.get(response.request.url)
               # Raspa la página aquí
       “`

       En este ejemplo, estamos utilizando un navegador Chrome sin cabeza para acceder al sitio web. Esto permite cargar la página sin necesidad de una ventana de navegador visible y debería evitar que ocurra el error 403.

    En general, hay varias formas de manejar el problema de un sitio web que devuelve un error 403 si no se habilita JavaScript. Puedes experimentar con las soluciones anteriores o probar otras técnicas, como usar un navegador diferente o modificar tu código de raspado web para que funcione sin JavaScript.

Comments are closed.