with tutorial spider soup scraping examples espaƱol code beautiful python screen-scraping scraper

tutorial - web scraping python examples



raspar sitios web con desplazamiento infinito (3)

He escrito muchos raspadores, pero no estoy realmente seguro de cómo manejar infinitos scrollers. En estos días la mayoría de sitios web, etc, Facebook, Pinterest tiene infinitos scrollers.


Encontrar la url de la fuente ajax será la mejor opción, pero puede ser complicado para ciertos sitios. Alternativamente, puede usar un navegador sin cabeza como QWebKit de PyQt y enviar eventos de teclado mientras lee los datos del árbol DOM. QWebKit tiene una api agradable y simple.


La mayoría de los sitios que tienen desplazamiento infinito (como señala Lattyware) también tienen una API adecuada, y es probable que se te ofrezca un mejor servicio al usar esto en lugar de raspar.

Pero si tienes que raspar ...

Dichos sitios utilizan JavaScript para solicitar contenido adicional del sitio cuando llega al final de la página. Todo lo que necesita hacer es averiguar la URL de ese contenido adicional y puede recuperarlo. La identificación de la URL requerida se puede hacer inspeccionando el script, utilizando la consola web de Firefox o utilizando un proxy de depuración .

Por ejemplo, abra la consola web de Firefox, desactive todos los botones de filtro excepto Net y cargue el sitio que desea raspar. Verás todos los archivos a medida que se cargan. Desplácese por la página mientras ve la Consola web y verá las URL que se utilizan para las solicitudes adicionales. Luego, puede solicitar esa URL usted mismo y ver en qué formato están los datos (probablemente JSON) y obtenerlos en su script de Python.


Puede utilizar selenio para desechar el sitio web de desplazamiento infinito como twitter o facebook.

Paso 1: Instale Selenium usando pip

pip install selenium

Paso 2: use el siguiente código para automatizar el desplazamiento infinito y extraer el código fuente

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import TimeoutException from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import sys import unittest, time, re class Sel(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "https://twitter.com" self.verificationErrors = [] self.accept_next_alert = True def test_sel(self): driver = self.driver delay = 3 driver.get(self.base_url + "/search?q=stckoverflow&src=typd") driver.find_element_by_link_text("All").click() for i in range(1,100): self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(4) html_source = driver.page_source data = html_source.encode(''utf-8'') if __name__ == "__main__": unittest.main()

Paso 3: Imprima los datos si es necesario.