source scraping open library example español crawler python web-crawler web-scraping scrapy

python - scraping - Haga clic en un botón en Scrapy



web scraping open source (3)

Estoy usando Scrapy para rastrear una página web. Parte de la información que necesito solo aparece cuando haces clic en un botón determinado (por supuesto, también aparece en el código HTML después de hacer clic).

Descubrí que Scrapy puede manejar formularios (como inicios de sesión) como se muestra here . Pero el problema es que no hay un formulario que llenar, así que no es exactamente lo que necesito.

¿Cómo puedo simplemente hacer clic en un botón, que luego muestra la información que necesito?

¿Tengo que usar una biblioteca externa como mecanizar o lxml?


Para utilizar JavaScript de manera adecuada y completa, necesita un motor de navegador completo y esto solo es posible con Watir / WatiN / Selenium, etc.


Scrapy no puede interpretar javascript.

Si es absolutamente necesario interactuar con el javascript en la página, desea utilizar Selenium.

Si usa Scrapy, la solución al problema depende de lo que haga el botón.

Si solo muestra contenido que estaba oculto anteriormente, puede raspar los datos sin problemas, no importa que no aparezca en el navegador, el HTML todavía está allí.

Si se está recuperando el contenido dinámicamente a través de AJAX cuando se presiona el botón, lo mejor es ver la solicitud HTTP que se apaga cuando se presiona el botón con una herramienta como Firebug. A continuación, puede solicitar los datos directamente desde esa URL.

¿Tengo que usar una biblioteca externa como mecanizar o lxml?

Si desea interpretar javascript, sí, necesita usar una biblioteca diferente, aunque ninguno de los dos es el adecuado. Ninguno de ellos sabe nada acerca de javascript. El selenio es el camino a seguir.

Si puede dar la URL de la página en la que está trabajando para raspar, puedo echar un vistazo.


Selenium navegador Selenium proporciona una muy buena solución. Aquí hay un ejemplo ( pip install -U selenium ):

from selenium import webdriver class northshoreSpider(Spider): name = ''xxx'' allowed_domains = [''www.example.org''] start_urls = [''https://www.example.org''] def __init__(self): self.driver = webdriver.Firefox() def parse(self,response): self.driver.get(''https://www.example.org/abc'') while True: try: next = self.driver.find_element_by_xpath(''//*[@id="BTN_NEXT"]'') url = ''http://www.example.org/abcd'' yield Request(url,callback=self.parse2) next.click() except: break self.driver.close() def parse2(self,response): print ''you are here!''