He escrito muchos raspadores, pero no estoy muy seguro de cómo manejar infinitos desplazadores. En estos días, la mayoría del sitio web, etc., Facebook, Pinterest tiene infinitos desplazadores.raspar sitios web con desplazamiento infinito
Respuesta
Puede usar selenio para eliminar el infinito sitio web de desplazamiento como Twitter o Facebook.
Paso 1: Instalar selenio usando pip
pip install selenium
Paso 2: usar el siguiente código para automatizar 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 + "https://stackoverflow.com/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: imprimir los datos si es necesario.
¿El ciclo significa que nos desplazamos hacia abajo 100 veces? donde 100 es un número elegido al azar. ¿Está bien? –
@satarupa Tiene razón el ciclo es desplazarse hacia abajo 100 veces –
La mayoría de los sitios que tienen desplazamiento infinito (como notas de Lattyware) también tienen una API adecuada, y es probable que te sirva mejor al usar esto en lugar de raspar.
Pero si debe raspar ...
Estos sitios están utilizando JavaScript para solicitar contenido adicional desde el sitio cuando llegue a la parte inferior 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 realizar inspeccionando la secuencia de comandos, utilizando la consola web de Firefox o usando un debug proxy.
Por ejemplo, abra la consola web de Firefox, apague todos los botones de filtro, excepto Net, y cargue el sitio que desea raspar. Verá todos los archivos a medida que se carguen. 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 obtenerla en su secuencia de comandos de Python.
¿Podría dar un ejemplo concreto de cómo hacerlo? – tatsuhirosatou
He agregado más detalles, ¡espero que ayude! – kindall
Encontrar la URL de la fuente Ajax será la mejor opción, pero puede ser engorroso para ciertos sitios. Alternativamente, puede usar un navegador sin cabeza como QWebKit
desde PyQt
y enviar eventos de teclado mientras lee los datos del árbol DOM. QWebKit
tiene una API agradable y simple.
- 1. ¿Cómo raspar logotipos de sitios web?
- 2. jQuery desplazamiento infinito "reset"
- 3. Utilización de un desplazamiento infinito/infinito
- 4. Desplazamiento horizontal infinito UIScrollView
- 5. desplazamiento infinito disparador manual
- 6. Desplazamiento infinito en django
- 7. isótopo y Desplazamiento infinito con activación manual
- 8. Cómo raspar HTTPS javascript páginas web
- 9. Raspando sitios web con Javascript habilitado?
- 10. Jquery, Jcarousel desplazamiento suave infinito
- 11. Desplazamiento infinito y la devolución de llamada
- 12. Raspar una página web con C# y HTMLAgility
- 13. Desplazamiento infinito Jquery - barra de desplazamiento en div no cuerpo
- 14. imagesLoaded método no funciona con JQuery mampostería y desplazamiento infinito
- 15. Opciones para raspar web - Versión C++ solamente
- 16. Publicar ejecutables y sitios web con NuGet
- 17. Diseñando sitios web con Ruby on Rails
- 18. Sitios web multilingües con ASP.NET MVC
- 19. ¿Cómo se hacen sitios web con Java?
- 20. Desplazamiento infinito de Jquery - con div no barra de desplazamiento del cuerpo
- 21. Depuración de sitios web móviles
- 22. Bloquear sitios web en Android
- 23. Openshift para sitios web comerciales
- 24. Orchard para sitios web personalizados
- 25. "Tipo de desplazamiento infinito". Que sea inferior fuego antes
- 26. UIScrollView. ¿Alguna idea sobre la implementación de desplazamiento/zoom "infinito"?
- 27. ¿Cómo usaría GWT para crear un panel de desplazamiento infinito?
- 28. ¿Puedo raspar el flash?
- 29. Desplazamiento infinito - setContentOffset: detiene la desaceleración de UIScrollView
- 30. pergamino infinito liviano con backbone.js
Su mejor opción aquí es utilizar las API de ese sitio, que será, con mucho, la opción más fácil y confiable. Aparte de eso, vas a tener que procesar JavaScript, lo que básicamente significa ejecutar un navegador completo, tales bibliotecas sí existen. –
suena como una simulación, ¿puede señalar algunos ejemplos de manejo de jscript –